如何以编程方式打开SearchView?

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

在这里输入图像说明

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

在这里输入图像说明

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

我尝试了几个function,如:

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" /> 

用。展开SearchView

 searchView.setIconified(false); 

并用它折叠

 searchView.setIconified(true); 

您需要将android:showAsAction的值从ifRoom|collapseActionView更改为alwaysSearchView的属性android:iconifiedByDefault应该为true ,这是默认值,否则用户无法折叠SearchView之后,它以编程方式展开。

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

这个对我有用。

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

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

  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); 

我知道这是迟到了,但是

尝试调用expandActionView()来打开它,并使用collapseActionView()来closures它。 你可以通过getActionView()在实际的Action View上调用requestFocus()给search视图焦点:)