后退按钮不折叠 SearchView

Posted

技术标签:

【中文标题】后退按钮不折叠 SearchView【英文标题】:Back button not collapsing SearchView 【发布时间】:2016-04-11 08:57:47 【问题描述】:

我的 AppCompat 工具栏中有一个 android.support.v7.widget.SearchView。

我单击“搜索”按钮以展开 MenuItem 的 ActionView,一切都很好,直到我单击设备的硬件“后退”按钮。这隐藏了键盘,并且 SearchView 的 EditText 失去焦点并且其光标消失,但该项目不会折叠回搜索图标。相反,“搜索”图标右侧的菜单项变得聚焦/突出显示,这是……不正确的。再按一次就不行了。

我尝试过以各种方式检测后退键,例如将 OnKeyListener 添加到 SearchView 或其 EditText,但它不会触发。按下操作栏中的向上按钮正是我需要的,所以我只需要检测返回按钮。

我的设置唯一奇怪的是 SearchView 本身不在布局中 - 如果我添加它,它会成功构建,但会在运行时崩溃。不知为何。

我有一个展开/折叠监听器,折叠仅在单击向上按钮时检测到,在按下返回按钮时不会触发。

谢谢

这是我设置 SearchView 的代码:

MenuItemCompat.setShowAsAction(menuItem, MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
final SearchView searchView = new MyobSearchView(activity);
MenuItemCompat.setActionView(menuItem, searchView);
MenuItemCompat.setOnActionExpandListener(menuItem, new FocusSearchFieldActionExpandListener(searchView, androidUtils));

【问题讨论】:

【参考方案1】:

您可以通过重写 onBackPressed() 方法来做到这一点,如下所示:

@Override
public void onBackPressed() 
        // do what you want

【讨论】:

大概在活动中? 是的。在活动中。 SearchView 展开时不会调用活动的 OnBackPressed。所以我不相信这是一个答案 onBackPressed() 在显示键盘时不会被调用......这不是答案。

以上是关于后退按钮不折叠 SearchView的主要内容,如果未能解决你的问题,请参考以下文章

按下后退按钮时,自动折叠移动设备上的下拉导航栏菜单

单击导航条折叠/关闭

单击时使导航栏折叠/关闭

为啥后退按钮不隐藏在导航控制器中?

UINavigationController 不显示后退按钮

如何在不覆盖自然后退按钮的情况下添加左栏按钮?