如何更改 android SearchView 文本

Posted

技术标签:

【中文标题】如何更改 android SearchView 文本【英文标题】:how to change android SearchView text 【发布时间】:2013-01-03 19:22:10 【问题描述】:

是否有用于 SearchView 的 setText() 方法或类似的方法? 我尝试像这样在 searchView 中设置搜索文本,但没有这样的方法。

searchView.setText(searchToken);

【问题讨论】:

【参考方案1】:

经过思考和尝试,我发现 API 中有一个名为 setQuery() 的方法,您可以设置 searchView 文本,您可以选择提交搜索或不使用布尔参数。

searchView.setQuery(searchToken, false);

【讨论】:

即使将布尔参数设置为 false 后,它仍然会再次查询。任何建议都会有所帮助。 我已经这样做了,但是将第二个参数设置为true 这样查询也会被执行,但请注意,虽然查询执行得很好,但文本框保持空白,直到手动执行给予重点。我如何确保自动设置的值也自动显示? 没关系。第二个参数是“提交”【参考方案2】:

您可以使用setQuery()更改文本框中的文字。

但是,setQuery() 方法会触发搜索视图的焦点状态,因此在调用此方法后屏幕上会显示一个键盘。

要解决这个问题,只需在setQuery()方法之后调用searchView.clearFocus()使其失去焦点,键盘将不会显示在屏幕上。

示例:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();

【讨论】:

写入后不显示 searchView.setIconified(false);显示。【参考方案3】:

如果您想在您的 SearchView 中预先填写一些文字 searchView.setQuery(text, false) 将无法开箱即用。原因是当SearchView 扩展时

searchView.onActionViewExpanded()

调用 searchView.setText("") 并清除我们设置的所有文本。

解决方案是设置一个 Expand 侦听器,并在 SearchView 展开后设置前置文本

override fun onCreateOptionsMenu(menu: Menu): Boolean 
    menuInflater.inflate(R.menu.main, menu)
    val searchView = menu.findItem(R.id.action_search).actionView as SearchView
    menu.findItem(R.id.action_search).setOnActionExpandListener(object : MenuItem.OnActionExpandListener 
        override fun onMenuItemActionExpand(item: MenuItem?): Boolean 
            // it is important to call this before we set our own query text.
            searchView.onActionViewExpanded()
            searchView.setQuery("Prefil Text", false)
            return true
        

        override fun onMenuItemActionCollapse(item: MenuItem?) = true
    )
    return true

【讨论】:

很好的答案。但要注意 searchView.onActionViewExpanded()searchView.setQuery() both 如果你有触发 onQueryTextChange()部署了 searchView.setOnQueryTextListener。第一个触发器很可能清空即将提供给第二个触发器的字符串。【参考方案4】:

这对我有用

    MenuItem sItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) sItem.getActionView();

    sItem.expandActionView();
    searchView.setQuery("your text", false);

【讨论】:

简单、快速的救生解决方案! 这可行,但添加此代码后,菜单选项显示 3 个点。我不想显示 3 个点,我只想显示图标! 你的菜单项应该有appcompat:showAsAction="always"【参考方案5】:

如果你想让searchView在用户点击x(关闭)后展开并收缩回一个图标,方法是:

searchView.isIconified = false // Expand it
searchView.setQuery("your text here", false) // true if you want to submit, otherwise false
searchView.clearFocus() // so the keyboard is not show up.

注意: 如果您使用以下方法扩展它:

searchView.onActionViewExpanded()

用户点击 x(关闭)后,searchView 不会收缩

【讨论】:

以上是关于如何更改 android SearchView 文本的主要内容,如果未能解决你的问题,请参考以下文章

如何更改SearchView上的默认图标,以便在Android的操作栏中使用?

更改操作栏searchview提示文本颜色

在 Android 操作栏中设置 SearchView 的样式

是否可以更改 Android SearchView 上的文本颜色?

为 Android TV 应用程序更改 BrowseFragment 的 SearchView 默认图标?

更改 SearchView 上的工具栏颜色/样式单击