
在我的小米平板 5 ( MIUI 13.0.9 )上,当外接键盘时,Alt 键会被系统作为 compose key ,如按下“alt+s”时会输出“”,按下“alt+u u”时会上屏“ü”。使用 Gboard 和“CodeBoard”测试过了,都是如此,可以判断是系统行为,不是输入法的。
感觉小米总喜欢瞎搞些这种东西。手头四五个安卓设备里就它有问题,不过手机 HyperOS 也是正常的。我并不需要这个功能,设置里也没找到哪个能关。这直接导致了开发 IME 时无法处理任何 Alt 组合键( onKeyDown 里完全接收不到按下 Alt 时字母事件)。
1 kuanat 5 小时 13 分钟前 Android 系统在语言和输入法相关设置里有个物理键盘的设定,可以点进去看看是否有切换键盘布局的选项,如果有的话切换到不使用 AltGr/Compose 的布局。印象 aosp 中有过,但我不是很确定。 这个问题说起来比较复杂。Android 系统的输入栈在内核部分和 Linux 是没有区别的,但之后就完全不一样了。因为是针对移动平台设计的,关于键盘布局的设定是和输入法、语言强绑定的。从底层修改这个按键和功能的映射是可行的,可以参考一下 https://github.com/keymapperorg/KeyMapper 这个应用。 简单说 Android 输入栈有两层,最底层和 Linux 处理输入设备一样,在内核态完成 scan code 到名义按键的映射,比如 scan code 1 代表 esc 按键。上面一层是按键和具体功能的映射,比如 A 按键的效果是 a 字符,有 shift 修饰的时候产生 A 字符。 如果你的系统可以获得 root 的话,可以看一下 /system/usr/keylayout/ 和 /system/usr/keychars/ 两个路径的文件。前者包含不同设备的 .kl 定义,代表 scan code 到名义按键的映射,后者包含 .kcm 定义,即名义按键到实际功能的映射,也就是一般所说的布局。可以检查一下是否正常。 如果你可以用 onKeyDown 获得 COMPOSE 事件的话,可以在编写的代码里强行当作 alt 来处理。 |