[英]How do I open the SearchView programmatically?
ActionBar 有一个小部件,称为“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" />
展开SearchView
searchView.setIconified(false);
并将其折叠
searchView.setIconified(true);
您需要将android:showAsAction
的值从ifRoom|collapseActionView
更改为always
。 SearchView
的属性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() 来关闭它。 您可以通过 getActionView() 在实际操作视图上调用 requestFocus() 以提供搜索视图焦点:)
对于androidx.appcompat.widget.SearchView
,
searchView.setIconifiedByDefault(true) // didn't work
searchMenuItem.expandActionView() // didn't work
MenuItemCompat.expandActionView(searchMenuItem) // didn't work
searchView.onActionViewExpanded() // didn't work
以下对我有用,
searchView.findViewById<View>(R.id.search_button).performClick()
扩展 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
保持always|collapseActionView
,否则当用户删除文本时它会保持打开状态。
要打开一个searchView
保持close_button
最后在onCreate
使用它:-
searchView.findViewById(R.id.search_button).performClick();
我正在寻找一种以编程方式扩展 SearchView 的解决方案,因为我需要恢复扩展状态。 没有一种解决方案对我有用。 除了使用 Handler().post()。 我知道使用 post() 不是一个好习惯。 但我正在处理遗留项目,这种解决方法对我来说是可以接受的。
初始化变量块
val searchMenuItem = menu.findItem(R.id.menu_search_item)
val searchView = searchMenuItem.actionView as SearchView
如何扩展 SearchView:
Handler().post {
searchMenuItem.expandActionView()
}
post() 有帮助的原因:如果你的应用程序写得不好,它可能会在 UI 线程上做太多工作。 post() 确保您的代码块将在 UI 线程可用于执行时执行。 这意味着如果您使用此解决方法,您会注意到 SearchView 展开之间的小延迟
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.