actionbar compat 中的 Android searchview 显示快速操作菜单,但停止获取键盘事件

标签 android event-handling android-actionbar-compat quickaction

我在我的 Android 应用程序中使用 ActionBarCompat 和 QuickAction(https://github.com/lorensiuswlt/NewQuickAction 也显示在 http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/ 中)。

在操作栏的右侧有传统的搜索图标,用户触摸它,搜索 View 展开,用户可以输入查询。

我有一个要求,而不是显示最近的搜索,弹出窗口将显示两个项目“在 foo 中搜索 TYPED_TEXT”和“在 bar 中搜索 TYPED_TEXT”,因此,而不是使用默认搜索弹出窗口(所以我不会'不必处理内容提供​​者和模拟光标只是为了显示相同的两个项目)。

在我的 SearchView.OnQueryTextListener , onQueryTextChange被覆盖,所以当用户键入至少 3 个字符时,我设置 QuickAction 并显示它。

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.
     }
 }

问题是:显示快速操作后,我无法输入任何内容。我必须再次触摸搜索 View 才能键入另一个字符。

我用 // [1] 评论的地方, 我试图用 setFocusable 改变焦点+ requestFocus , setFocusableInTouchMode + requestFocus甚至setFocusable + setFocusableInTouchMode + requestFocus ,但根本没有成功。 这是替换 // [1] 的 fragment :

mSearchView.setFocusable(true);
mSearchView.setFocusableInTouchMode(true);
boolean gotFocus = mSearchView.requestFocus();
Log.d("DOUG", Boolean.toString(gotFocus));

日志显示gotFocus = true ,但我仍然无法打字。我看到一个蓝色条,表明它已准备好接受输入,但它没有闪烁。软键盘也一直显示,但当我打字时,就像我在输入不可编辑的东西一样。可能 QuickAction 正在捕获软键事件,但我找不到如何避免这种情况。

关于如何解决此问题或解决方法的任何想法?

谢谢

最佳答案

我最终修改了 PopupWindows.java在 NewQuickAction 中,以便 preShow 可以选择接受一个参数来判断弹出窗口是否可聚焦。然后它将参数传递给 mWindow.setFocusable(…)

关于actionbar compat 中的 Android searchview 显示快速操作菜单,但停止获取键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621702/

相关文章:

android - 从android向服务器发送多张图片

java - Android 应用程序在 Lollipop 上崩溃

javascript - Javascript 添加事件监听器

java - 如何在我的 SWT 应用程序中检测 ctrl-f

android - 带有ActionBarCompat的Google io 2013 android应用程序的git下载在哪里

java - Android:如何生成多个加载器

android - 摩托罗拉低功耗蓝牙 API 支持平板电脑

java - 如何制作一个猜数字游戏

android - 抽屉导航在滚动时更改背景

android - 无法格式化操作栏标题