首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android在达到焦点视图之前处理关键事件。

Android在达到焦点视图之前处理关键事件。
EN

Stack Overflow用户
提问于 2015-07-25 18:37:41
回答 1查看 3.2K关注 0票数 1

在HID模式下,我通过蓝牙将一个外部条形码扫描仪连接到我的平板电脑上,并试图处理我的应用程序中的输入。条形码扫描器基本上像键盘一样工作。

我有一个简单的gui,在我的主要活动中,我有以下方法:

代码语言:javascript
运行
复制
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    System.out.println(keyCode + " - " + (char) event.getUnicodeChar());
    return true;
}

问题:

当我打开一个文本应用程序,像谷歌笔记和扫描任何代码条形码后插入一个新的行。这让我认为,我可以处理键事件,并将所有字符写入一个字符串生成器,直到我到达“Enter”的键事件为止。

但问题是,当我在应用程序中使用扫描仪(这个条形码)时,上面方法的输出如下:

59 -��<- 'Shift‘ 29-a 59 -�� 47-S 62 -8-1 9-2 10-3

在事件中无法捕捉到条形码末尾的“Enter”(应该是keyCode 66),但是我的GUI中的一个元素被高亮显示,这意味着扫描仪肯定发送了'Enter‘

当我在图形用户界面中添加一个多行EditText并在元素聚焦时扫描相同的条形码时,输出如下:

29-a 47-S 62 -8-1 9-2 10-3 66 -

在这里,“Enter”键事件被记录下来,而两个“Shift”键都是不可见的(但是EditText元素中的字母是大写的)。

作为一种解决办法,我可以有一个不可见的多行元素,它一直都是聚焦的,但我真的不喜欢依赖一个不可见的元素。相反,我想捕捉我的条形码扫描仪发送的所有关键笔画。

你知道为什么我看不到“进入”吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-26 08:35:31

我对这件事做了更多的研究,找到了一个很好(对我来说)令人满意的解决方案。

显然,onKeyDown和onKeyUp并不总是被调用的,特别是当一个KeyEvent被一个窗口元素所消耗时。在我的示例中,ListView具有默认焦点,并在到达上述方法之前使用ENTER事件(因此,正如我的问题描述中所提到的那样,它被突出显示)。

还可以使用另一种方法,即在将KeyEvents发送到窗口之前调用它。是dispatchKeyEvent。但是谨慎点,这个事件被称为两次,一次是按下键,一次是键向上。

这里有一个示例代码:

代码语言:javascript
运行
复制
@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    System.out.println(event.getAction() + " " + event.getKeyCode() + " - " + (char) event.getUnicodeChar());

    return true;
}

这个解决方案对我有效,因为我的应用程序不需要监听任何其他关键事件,否则应该使用另一个返回。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31629853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档