You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin应用中使用XML实现的Material 3 SearchBar及解决文本读写问题

Material 3 SearchBar 无法输入文本的解决办法

Material3 的 SearchBar 本身仅作为触发控件,不具备文本输入能力,必须配合 SearchView 才能实现输入与读取功能。以下是具体解决步骤:

1. 调整布局结构

在 XML 布局中同时添加 SearchBar 和 SearchView,通过 app:searchBar 属性关联两者:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <com.google.android.material.search.SearchBar
        android:id="@+id/search_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/navigationbarcolor"
        android:hint="Search" />

    <com.google.android.material.search.SearchView
        android:id="@+id/search_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:searchBar="@id/search_bar" />
</LinearLayout>

2. Kotlin 代码处理输入逻辑

在 Activity/Fragment 中关联控件,并设置监听读取输入文本:

import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import com.google.android.material.search.SearchBar
import com.google.android.material.search.SearchView

// 初始化控件
val searchBar = findViewById<SearchBar>(R.id.search_bar)
val searchView = findViewById<SearchView>(R.id.search_view)

// 点击 SearchBar 展开输入框
searchBar.setOnClickListener {
    searchView.show()
}

// 监听输入内容变化
searchView.editText.addTextChangedListener(object : TextWatcher {
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        val inputText = s?.toString() ?: ""
        // 此处可处理输入文本,比如实时搜索逻辑
        Log.d("SearchContent", inputText)
    }

    override fun afterTextChanged(s: Editable?) {}
})

// 主动获取当前输入文本
fun getCurrentSearchText(): String {
    return searchView.editText.text.toString()
}

3. 确认 Material3 依赖

检查 Module 级别的 build.gradle 文件,确保引入正确的 Material3 依赖:

dependencies {
    implementation "com.google.android.material:material:1.9.0" // 建议使用最新稳定版本
}

内容的提问来源于stack exchange,提问作者Dipanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:44:57