【问题标题】:Russian (cyrillic) key events not firing俄语(西里尔文)关键事件未触发
【发布时间】:2013-08-11 16:43:54
【问题描述】:

我有一个自定义视图,其中 onKeyDown() 被覆盖。当我使用标准的 Android 英语(或意大利语)软键盘时,它工作正常,但是当我将设备设置为俄语时,键事件永远不会到达 onKeyDown()onKeyUp()(它们从未被调用,我尝试使用断点)。

此外,如果所有视图都丢弃了该事件,我应该能够从 Activity 的方法中捕获它,但似乎我什至不能在那里。请注意,视图是集中的,实际上我可以捕捉方向键按下。删除/退格俄语软键也被捕获。

我应该如何捕捉俄语字符关键事件?

【问题讨论】:

    标签: android android-custom-view ime cyrillic


    【解决方案1】:

    这似乎是其他 Android 用户也遇到过的问题,我找到的解决方案是改写 dispatchKeyEvent。

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        Toast.makeText(getApplicationContext(), "Key: " + event.getKeyCode(),
            Toast.LENGTH_LONG).show();
    
        return super.dispatchKeyEvent(event);
    }
    

    使用 event.getAction() 调用可以告诉您它是 onKeyDown、onKeyUp 等。有关 KeyEvents 的更多信息,请查看this Android developers' page,有关 Android 键盘不响应某些语言的更多信息,请查看 this bug report .

    【讨论】:

    • 我确实以这种方式捕获关键事件,但它带来的所有信息都设置为 0。
    【解决方案2】:

    来自KeyEvent 文档:

    由于软输入法可以使用多种创新方式输入文本,因此无法保证软键盘上的任何按键都会产生按键事件:这由 IME 自行决定,实际上发送此类事件是灰心。您永远不应该依赖在软输入法上为任何键接收 KeyEvents。

    就您正在获得KeyEvents 而言,这违反了 Google 的建议,并且在未来的所有 android 版本中都不受支持。随着时间的推移,这种方法肯定会在更多设备上得到突破。那么如何捕捉人物呢? 一种选择是使用TextWatcher

    【讨论】:

    • 我想我很久以前就读过(当我第一次创建这个自定义视图时)如果组件不支持 IMF,软键盘会退回到一种模拟的兼容模式硬件键盘。我找不到它,你的报价很清楚。我将求助于使用触发事件的自定义“应用内”键盘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2011-10-12
    • 2015-10-14
    • 2011-11-18
    相关资源
    最近更新 更多