【问题标题】:Set searchView focused when activity opens android当活动打开android时设置searchView焦点
【发布时间】:2021-03-22 16:16:28
【问题描述】:

我有一个 SearchActivity,其中包含一个包含 searchView 的菜单。

<?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() 但这不起作用!

【问题讨论】:

    标签: android kotlin menu searchview oncreateoptionsmenu


    【解决方案1】:

    首先需要在 menu.xml 中设置app:showAsAction ="always"

    在你的onCreateOptionsMenu 上使用searchView.setIconifiedByDefault(false) 来保持默认情况下的搜索视图。

    这并没有打开键盘,它仍然是创建了这个函数来打开键盘:

    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
    

    【讨论】:

    • 检查我在下面写的答案,也许你可以帮助我
    • 你想隐藏它吗? @james04
    • 我希望布局完全是第二张图片,但是当我进入活动时会自动展开
    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2021-12-23
    • 1970-01-01
    • 2012-07-27
    • 2012-05-30
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多