我目前正在使用ActionBar菜单项在操作栏中显示SearchView . 当搜索菜单项被展开时,显示软键盘,这就是我想要的 . 现在,当用户按下后退按钮关闭软键盘时,我还想在操作栏中折叠SearchView .
我尝试在MenuItem和ActionView上实现以下侦听器OnKeyListener和OnFocusChangeListener . 我也尝试在Activity中使用OnBackPressed() . 以上都没有检测到后退按钮用于关闭软键盘的时间 .
有任何想法吗?
我已经实现了OnActionExpandListener来了解SearchView何时可见 .
11 回答
如果您想在用户点击键盘上的搜索图标时折叠键盘,这可以通过简单实现
inside onquerytextsubmitted {
searchView.clearfocus()
}
你需要两次调用setIconified .
要实际折叠搜索视图并关闭键盘 .
使用第二个呼叫键盘清除搜索视图的第一个呼叫文本,并关闭搜索视图 .
我将扩展@ user1258568的懒惰答案 . 这对我有用 . 请注意,它会在焦点丢失时清除查询 .
我找到了更好的解决方案 .
显示或隐藏键盘时会调用
OnQueryTextFocusChangeListener
. 在显示键盘并且搜索视图具有焦点时首先调用 . 当keyboard
被隐藏并且搜索视图将失去焦点时再次被调用,然后可以使用.2807639_刚刚覆盖onBackPressed:
你的onCreateOptionsMenu会像这样膨胀mSearchView:
你有没有像下面这样实现以下内容:
您还需要:
您需要将“mSearchView”和“isClosed”作为活动的全局变量 .
Jon Willis的答案很有效 . 这是对他答案的改进 .
首先,创建一个实现
View.OnFocusChangeListener
的新类:接下来,在
SearchView
上设置监听器:您只需要在菜单布局中放置“collapseActionView”属性
这将为您提供您自己寻找的功能 . 在发送查询后,不要忘记在SearchView上调用方法“clearFocus”来关闭键盘 .
这就是我为使键盘消失所做的 . 您可以尝试查看这是否适合您 . 我将
searchView
设置为不可见,然后再次显示 .这是可以实现的:
基于setOnQueryTextFocusChangeListener()的解决方案对我不起作用,因为事件未启动 - searchView在提交时没有失去焦点,可能是因为我在包含搜索视图的同一活动中执行搜索 .
无论如何,我认为使用OnQueryTextListener更正确,因为它描述了更准确地提交文本的事件 .
出于某种原因,
menuItem.collapseActionView()
没有用,所以我使用searchView.setIconified(true)
代替 .这给出了以下结果作为代码示例 .