【发布时间】:2013-11-14 06:09:09
【问题描述】:
我对 Android 原生开发还很陌生,我正在尝试弄清楚如何自定义 IME 操作按钮。我查看了 Google 文档,但几乎找不到有关预期行为的信息。
从offical guide了解到,可以使用属性来配置键盘动作按钮:
- android:imeOptions 可以将显示在空格键附近的按钮的 text/id 设置为一些预定义的值(例如 actionGo 将键标签设置为 Go 并将 id 设置为2)
- android:imeActionLabel 设置键盘全屏时在输入区域内显示的按钮的标签,通常是横向模式。可以设置为任何字符串值。
- android:imeActionId和之前一样,但是设置了传递给回调方法的数字Id
但经过一些经验尝试后,我发现 API 级别 15 和下一个 API 级别之间的行为不同。
我设置了一个简单的 EditText 元素,具有以下属性:
<EditText
...
android:imeOptions="actionGo"
android:imeActionLabel="Custom"
android:imeActionId="666"
android:inputType="text"/>
我已经检查了纵向和横向模式下不同 API 级别的效果。这是结果。
API 级别 15 - 4.0.3
在纵向模式下,键标签是Go,传递给回调方法的操作ID是2,与imeOptions设置相对应。
在横向模式下,键标签/id 是 Go/2 作为纵向模式,而在输入区域显示的按钮是 Custom/666,根据imeActionLabel 和 imeActionId 属性。
API 级别 16、17 和 18 - 4.1.2、4.2.2 和 4.3
在纵向和横向模式下,键和按钮都以自定义标签显示,并绑定到 666 id,忽略 imeOptions 属性。
这种不匹配的行为非常烦人,因为:
- API 级别 >= 16 时,您无法区分按键按钮和输入区域按钮
- API 级别 = 15 时,您无法为按键设置任何自定义文本。
您知道如何在 API 15 和 16+ 中获取此信息吗? 或者是否有办法在所有(或至少部分)API 版本中获得一致的行为?
也许我在 IME 设置中遗漏了一些可以证明不同行为的东西......
非常感谢!
【问题讨论】:
标签: android android-input-method