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" />
答案 0 :(得分:231)
使用
展开SearchView
searchView.setIconified(false);
并用
折叠它searchView.setIconified(true);
您需要将android:showAsAction
的值从ifRoom|collapseActionView
更改为always
。 SearchView
的属性android:iconifiedByDefault
应为true
,这是默认值,否则用户在以编程方式展开后无法折叠SearchView
。
答案 1 :(得分:67)
尝试在MenuItem上调用expandActionView()
,而不是在ActionView上调用onActionViewExpanded()。
它对我有用。
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();
答案 2 :(得分:12)
如果您只想在必要时使用支持库,请执行此操作
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
MenuItemCompat.expandActionView(searchMenuItem);
其他只是这样做
<iframe>
答案 3 :(得分:6)
我知道这已经晚了但是
尝试调用expandActionView()打开它,使用collapseActionView()来关闭它。您可以通过getActionView()在实际的Action View上调用requestFocus(),以便为搜索视图提供焦点:)
答案 4 :(得分:0)
要打开searchView
,最后保留close_button
,请在onCreate
中使用它:-
searchView.findViewById(R.id.search_button).performClick();
答案 5 :(得分:0)
扩展Matthias Robberts的答案:
我希望列表片段保留其搜索值,并在用户从其他片段返回后进行设置。
awslogs get /aws/lambda/log-group-1 --filter-pattern '"ClinicID=7667"' --filter-pattern '" username=simran+test@abc.com"' --start "5h ago" --timestamp
,对于菜单,我保留if (myViewModel.filterTextSaved.isNotEmpty()) { // Kotlin, storing state in ViewModel
searchItem.expandActionView() // needs to come first, otherwise empty text
theTextArea.setText(courseViewModel.filterTextOnClick)
}
,否则当用户删除文本时它将保持打开状态。
答案 6 :(得分:0)
我正在寻找以编程方式扩展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展开之间的延迟很小
答案 7 :(得分:0)
对于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()