如何以编程方式打开SearchView?


102

ActionBar有一个名为“ SearchView”的小部件。不用时,它看起来像这样:

在此处输入图片说明

使用时,它看起来像这样:

在此处输入图片说明

我想(当然是通过编程)打开searchview(使其“使用中”)。

我尝试了几种功能,例如:

SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(this);

    searchView.performClick();
    searchView.requestFocus();

但是这些都不起作用...

XML中的SearchView:

<item android:id="@+id/menu_search"
      android:title="Search"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="ifRoom|collapseActionView"
      android:actionViewClass="android.widget.SearchView" />

Answers:


255

展开SearchView

searchView.setIconified(false);

并用折叠

searchView.setIconified(true);

您需要将的值android:showAsAction从更改ifRoom|collapseActionViewalways。该SearchView的属性android:iconifiedByDefault应该是true,这是默认值,否则用户无法折叠SearchView它编程扩大后。


15
您好,弹出了键盘,但SearchView没有打开。
伊莱·瑞瓦

1
您好,这也不起作用。我用XML源代码更新了帖子。
伊莱·瑞瓦

7
伙计,您是我的国王英雄
Eliseo Ocampos

1
showAsAction =“ always”会在旋转后显示一个丑陋的全屏搜索栏
Francesco Gabbrielli,

1
showAsAction="always"使搜索图标在展开时停留在操作栏上,与手动聚焦搜索时的外观不同。
Ixx

74

尝试调用expandActionView()MenuItem,而不是ActionView的onActionViewExpanded()。

这个对我有用。

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();

10
工作完美,但仅适用于API>14。对于较早的API,您可以使用以下菜单:MenuItemCompat.expandActionView(searchMenuItem);
2014年

这是正确的解决方案-选定的一项将迫使您进行设置showAsAction: always,这会导致某些问题。
Ixx

13

如果您只想在必要时使用支持库,请执行此操作

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    if (Utils.hasIceCreamSandwich())
        searchMenuItem.expandActionView();
    else MenuItemCompat.expandActionView(searchMenuItem);

否则只需这样做

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    MenuItemCompat.expandActionView(searchMenuItem);

6

我知道这很晚了

尝试调用expandActionView()将其打开,然后调用collapseActionView()将其关闭。您可以通过getActionView()在实际的Action View上调用requestFocus()来赋予搜索视图焦点:)


1

扩大Matthias Robberts的答案:

我希望列表片段保留其搜索值,并在用户从其他片段返回后进行设置。

if (myViewModel.filterTextSaved.isNotEmpty()) { // Kotlin, storing state in ViewModel
    searchItem.expandActionView() // needs to come first, otherwise empty text
    theTextArea.setText(courseViewModel.filterTextOnClick)
}

对于菜单,我保持always|collapseActionView,否则用户删除文本时它将保持打开状态。


0

最终要打开一个searchView保持:close_buttononCreate

searchView.findViewById(R.id.search_button).performClick();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.