效果图
在toolbar放置一个搜索按钮,并且点击该按钮后,会出现搜索框,让输入搜索词。然后监听setOnQueryTextListener
即可得到文本内容,避免了自己手动在toolbar添加输入框,再添加监听事件,提高效率。
关键代码
class MainActivity : AppCompatActivity() {
var searchTv: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
searchTv = findViewById(R.id.searchTv)
toolbar.contentInsetStartWithNavigation = 0
setSupportActionBar(toolbar)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
//引用menu文件
menuInflater.inflate(R.menu.menu_search, menu)
//找到SearchView并配置相关参数
val searchItem = menu.findItem(R.id.action_search)
val mSearchView = searchItem.actionView as SearchView
//搜索图标是否显示在搜索框内
mSearchView.setIconifiedByDefault(true)
//设置搜索框展开时是否显示提交按钮,可不显示
mSearchView.isSubmitButtonEnabled = true
//让键盘的回车键设置成搜索
mSearchView.imeOptions = EditorInfo.IME_ACTION_SEARCH
//搜索框是否展开,false表示展开
mSearchView.isIconified = true
//获取焦点
mSearchView.isFocusable = true
mSearchView.requestFocusFromTouch()
//设置提示词
mSearchView.queryHint = "请输入关键字"
//设置输入框文字颜色
val editText = mSearchView.findViewById<EditText>(R.id.search_src_text)
editText.setHintTextColor(ContextCompat.getColor(this, R.color.purple_200))
editText.setTextColor(ContextCompat.getColor(this, R.color.white))
// 设置搜索文本监听
mSearchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
// 当内容不为空,点击搜索按钮时触发该方法
override fun onQueryTextSubmit(query: String): Boolean {
Snackbar.make(mSearchView, "搜索内容===$query", Snackbar.LENGTH_SHORT).show()
searchTv?.visibility = View.VISIBLE
searchTv?.text = query
//清除焦点,收软键盘
//mSearchView.clearFocus();
return false
}
// 当搜索内容改变时触发该方法
override fun onQueryTextChange(newText: String): Boolean {
//do something
//当没有输入任何内容的时候清除结果,看实际需求
if (TextUtils.isEmpty(newText))
searchTv?.visibility = View.INVISIBLE
return false
}
})
return super.onCreateOptionsMenu(menu)
}
}
MainActivity的布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/AppTheme.ToolBar"
app:menu="@menu/menu_search"
app:title="@string/app_name"
app:titleTextColor="@color/white"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/searchTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
menu菜单文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_baseline_search_24"
android:title="搜索"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom" />
</menu>
源码地址
https://github.com/yurensan/MaterialDesignDemo
我是予人三,希望大家点赞支持我哦~ 有大家的鼓励我会分享更多内容