actionbar compat中的Android搜索视图显示QuickAction菜单,但停止获取键盘事件
我在Android应用程序中使用ActionBarCompat和QuickAction(也显示在) 在操作栏的右侧有一个传统的搜索图标,用户触摸它,搜索视图展开,用户可以键入查询 我有一个要求,不是显示最近的搜索,而是在弹出窗口中显示两个项目“foo中的搜索类型的_文本”和“bar中的搜索类型的_文本”,因此,而不是使用默认的搜索弹出窗口(这样我就不必与内容提供商打交道并模拟光标来显示相同的两个项目) 在我的actionbar compat中的Android搜索视图显示QuickAction菜单,但停止获取键盘事件,android,event-handling,android-actionbar-compat,quickaction,Android,Event Handling,Android Actionbar Compat,Quickaction,我在Android应用程序中使用ActionBarCompat和QuickAction(也显示在) 在操作栏的右侧有一个传统的搜索图标,用户触摸它,搜索视图展开,用户可以键入查询 我有一个要求,不是显示最近的搜索,而是在弹出窗口中显示两个项目“foo中的搜索类型的_文本”和“bar中的搜索类型的_文本”,因此,而不是使用默认的搜索弹出窗口(这样我就不必与内容提供商打交道并模拟光标来显示相同的两个项目) 在我的SearchView.OnQueryTextListener中,会覆盖onQueryTe
SearchView.OnQueryTextListener
中,会覆盖onQueryTextChange
,因此当用户键入至少3个字符时,我会设置快速操作并显示它
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
Context context = MyActivity.this.getBaseContext();
LayoutInflater inflator = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rootView = inflator.inflate(R.layout.quickaction_popup, null);
rootView.measure(0, 0);
QuickActionList action = new QuickActionList(MyActivity.this,
QuickActionList.HORIZONTAL, new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
action.addActionView(rootView);
action.show(mSearchView);
// [1]. I'll explain this comment line below.
return false; // I tried with return true as well to indicate I've consumed the event here.
}
}
问题是:显示快速操作后,我无法键入任何内容。我必须再次触摸搜索视图以键入另一个字符
在我用/[1]
评论的地方,我试图用setFocusable
+requestFocus
,setFocusableInTouchMode
+requestFocus
甚至setFocusableInTouchMode
++requestFocus
来改变焦点,但没有成功。
以下是取代/[1]
的代码片段:
mSearchView.setFocusable(true);
mSearchView.setFocusableInTouchMode(true);
boolean gotFocus = mSearchView.requestFocus();
Log.d("DOUG", Boolean.toString(gotFocus));
日志显示gotFocus=true
,但我仍然无法键入。我看到一个蓝色的条显示它已经准备好接受输入,但它没有闪烁。软键盘也一直在显示,但当我打字时,就好像我在键入不可编辑的内容。可能QuickAction正在捕获软键事件,但我找不到如何避免这种情况
关于如何解决这个问题或解决方法有什么想法吗
谢谢我最终在NewQuickAction内部进行了修改,presshow
可以选择接受一个参数,以告知弹出窗口是否可聚焦。然后它将参数传递给mWindow.setFocusable(…)
我最终在NewQuickAction内部进行了修改,以便显示前
可以选择接受一个参数,以告知弹出窗口是否可聚焦。然后将参数传递给mWindow.setFocusable(…)