簡體   English   中英

活動打開時設置搜索視圖焦點 android

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM