如何以编程方式closuresSearchView?
我目前在我的应用程序的操作栏中有一个SearchView。 当我点击search图标时,SearchView会展开,并按预期popup键盘。 单击SearchView框中的“X”按预期closuresSearchView。 但是,当SearchView被激活,我按下“后退”button,我的应用程序退出。 这是正确的行为,但我现在要做的是捕获button按下,当SearchView可见时closuresSearchView(而不是我的应用程序)。 有没有一种方法来调用SearchView OnCloseListener()程序化的后退button按? 例如,像这样的东西:
// On a back button press, if we are currently searching, // close the SearchView. Otherwise, invoke normal back button // behavior. public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isSearchViewVisible) { SearchView searchView = (SearchView) menu.findItem(R.id.searchBox) .getActionView(); // This method does not exist searchView.invokeClose(); return true; } } return super.onKeyDown(keyCode, event); }
基于@MarcinOrlowski的答案,你也可以使用:
@Override public void onBackPressed() { if (!searchView.isIconified()) { searchView.setIconified(true); } else { super.onBackPressed(); } }
超越使用
searchView.setIconifeid(true)
我也使用MenuItemCompat.collapseActionView
MenuItemCompat.collapseActionView(menuItem)
有一个简单的方法来做到这一点:
@Override public void onBackPressed() { if (!searchView.isIconified()) { searchView.onActionViewCollapsed(); } else { super.onBackPressed(); } }
或使用:
@Override public void onBackPressed() { searchView.onActionViewCollapsed(); super.onBackPressed(); }
这将使searchView崩溃之前,你按回来然后后面的行动将被调用。
这两个解决scheme将工作
拦截BACKbutton覆盖onBackPressed()
( 请参阅文档 )
@Override public void onBackPressed() { if (isSearchViewVisible) { SearchView searchView = (SearchView) menu.findItem(R.id.searchBox) .getActionView(); // This method does not exist searchView.invokeClose(); } else { super.onBackPressed(); } }
编辑 :
文档说 :
如有必要,可以通过调用MenuItem上的expandActionView()和collapseActionView()来展开或折叠自己的代码中的操作视图。
这是我唯一能做到的事情:
toolbar.collapseActionView();
如果你有你的searchViewinput
mSearchView.setIconified(true);
只会清除文字。
closuressearchView的正确方法是
mSearchView.onActionViewCollapsed();
使用:
searchView.setIconified(true);
我更喜欢!searchView.isIconified()在onBackPressed()方法中的if(isSearchViewVisible)作为选项2不起作用,当您在fragmentmanager的后台堆栈中添加了片段,您希望在按下后退button时显示这些片段。
我的方式:
- 创buildCustomSearchView类
公共类CustomSearchView扩展SearchView { 公共CustomSearchView(最终的上下文上下文){ 超级(上下文); this.setIconifiedByDefault(真); } @覆盖 public boolean dispatchKeyEventPreIme(KeyEvent event){ if(event.getKeyCode()== KeyEvent.KEYCODE_BACK && event.getAction()== KeyEvent.ACTION_UP){ this.onActionViewCollapsed(); } 返回super.dispatchKeyEventPreIme(event); } }
- 添加actionViewClass
<项目 机器人:ID = “@ + ID / menu_search” 机器人:标题= “@string/ menu_search” 机器人:图标= “@绘制/ ic_search” 机器人:showAsAction = “collapseActionView | ifRoom” 机器人:actionViewClass = “com.myapp.CustomSearchView”/>
- 创buildCustomSearchView到onCreateOptionsMenu
CustomSearchView searchView =(CustomSearchView)menu.findItem(R.id.menu_search).getActionView();
如果在onBackPressed()
方法中没有使用任何函数, onBackPressed()
其从Activity中移除,以使SearchView
本身处理onBackPress
事件。
我正在使用SearchView
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchview = (SearchView) MenuItemCompat.getActionView(searchItem); searchview.setIconifiedByDefault(true); searchview.setOnQueryTextListener(this); searchview.setSubmitButtonEnabled(true); searchview.setQueryHint("Search Here"); super.onCreateOptionsMenu(menu, inflater); }
和我的menu.xml如下
<item android:id="@+id/action_search" android:icon="@drawable/search_tool" android:orderInCategory="1" android:title="Search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always|collapseActionView"/>
你也可以使用collapseActionView
。 它自动处理后退button,折叠SearchView
<item android:id="@+id/action_search" android:icon="@drawable/ic_magnify" android:title="@string/action_title_search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="ifRoom|collapseActionView" />
- 在Eclipse中进行Android NDKdebugging – 如何停止只在使用本机代码时才会出现的segfaults / SIGILL
- 我可以让一个ListView项目不可选?
- 如何在使用Android时读取Debug.Log?
- java.lang.RuntimeException:无法在未调用Looper.prepare()的线程中创build处理程序;
- 为什么我的Android服务在进程被终止时重新启动,即使我使用了START_NOT_STICKY?
- Android中的JSONparsing
- 我怎样才能从一个活动传递一个位图对象到另一个
- 显示单个项目的回收站视图
- Android重写onBackPressed()