[英]Set searchView focused when activity opens android
我有一個帶有包含 searchView 的菜單的 SearchActivity。
<?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/searchMessageMenuItem"
android:icon="@drawable/ic_search"
android:title="Search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>
在 onCreateOptionsMenu 我得到了 searchView
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.search_message_menu, menu)
searchView = menu?.findItem(R.id.searchMessageMenuItem)?.actionView as SearchView
searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
if (!query.isNullOrEmpty() && validateQuery(query))
searchViewModel.searchMessage(query)
return true
}
override fun onQueryTextChange(newText: String?): Boolean { return true }
})
return super.onCreateOptionsMenu(menu)
}
因此,當我單擊搜索圖標時,鍵盤出現並且工具欄設置為寫入。 好吧,我希望這個功能在活動開始時默認發生,而不是通過單擊搜索圖標。 我試過searchView.requestFocus()
但這不起作用!
您需要的第一件事是在您的菜單中設置app:showAsAction ="always"
。xml
並在您的onCreateOptionsMenu
上使用searchView.setIconifiedByDefault(false)
來保持 searchView 默認使用。
這不會打開鍵盤,它仍然是 Created this function 來打開鍵盤:
private fun setFocused(searchView: SearchView) {
searchView.requestFocus()
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(searchView, InputMethodManager.SHOW_IMPLICIT)
}
這是完整的代碼:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.search_message_menu, menu)
searchView = menu?.findItem(R.id.searchMessageMenuItem)?.actionView as SearchView
searchView.setIconifiedByDefault(false)
setFocused(searchView)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
/*
* your code here
*/
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
return true
}
})
return super.onCreateOptionsMenu(menu)
}
private fun setFocused(searchView: SearchView) {
searchView.requestFocus()
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(searchView, InputMethodManager.SHOW_IMPLICIT)
}
這是菜單:
<?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/searchMessageMenuItem"
android:icon="@android:drawable/ic_menu_search"
android:title="Search"
app:showAsAction="always"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>
對於始終顯示的圖標,我發現這個解決方案很有用當重新繪制搜索視圖時,這是我的解決方案:
searchView.setIconifiedByDefault(false)
searchView.viewTreeObserver.addOnDrawListener {
searchView.findViewById<AppCompatImageView>(androidx.appcompat.R.id.search_button).visibility = View.GONE
searchView.findViewById<AppCompatImageView>(androidx.appcompat.R.id.search_mag_icon).visibility = View.GONE
}
setFocused(searchView)
如果您希望在查詢為空時保持關閉圖標可見,您可以使用:
searchView.findViewById<AppCompatImageView>(androidx.appcompat.R.id.search_close_btn).visibility = View.VISIBLE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.