gsy*_*sko 16 android android-softkeyboard
Cyril Mottier在Android软键盘上自定义了发送/完成/返回键.在尝试代码时,我(以及评论中的其他几个)注意到在XML中设置带有新ID的imeActionId(例如@ + id/...)会向OnEditorActionListener返回0,当键被命中时用户,而不是唯一ID.但是,如果在ids.xml中设置ID并将imeActionId设置为该值(例如w/@id/...),则会导致布局膨胀错误.
我能成功将imeActionId设置为唯一ID的唯一方法是以Java编程方式设置它.那么XML属性imeActionId的正确用法是什么?
这是我的所有代码的要点:https://gist.github.com/gsysko/d46adbe27d409bde0299
谢谢你考虑这个问题.
tre*_*r-e 29
原因是imeActionId在这种情况下,这是一个轻微的误称.Javadoc imeActionId说:
为输入方法连接到文本视图时使用的EditorInfo.actionId提供值.
它正在寻找你分配一个值.资源ID用于标识应用中的资源,但没有保证值.在某些情况下,您可以根据资源ID进行比较,例如View.getId(),但将资源ID与使用的常量值混合起来并不好EditorInfo.Android可能会试图通过抛出您所看到的异常来解析XML文件时阻止您执行此操作,但如果您以编程方式设置它,则在运行时可以执行的检查不多.
相反,您可以在资源中定义一个整数值,如下所示:
<!--res/values/integers.xml-->
<resources>
<item type="integer" name="customImeActionId" format="integer">100</item>
</resources>
Run Code Online (Sandbox Code Playgroud)
并使用它
android:imeActionId="@integer/customImeActionId"
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您可以检索它
int imeActionId = getResources().getInteger(R.integer.customImeActionId);
Run Code Online (Sandbox Code Playgroud)
编辑:好的,这引起了我的兴趣,因此在Android源代码中进一步查看,TextView解析了以下属性:
mEditor.mInputContentType.imeActionId = a.getInt(attr, mEditor.mInputContentType.imeActionId);
Run Code Online (Sandbox Code Playgroud)
它将mEditor.mInputContentType.imeActionId用作默认值 - 在这种情况下为0 - 如果找不到int值attr,则说明如果使用新创建的ID,它返回0的原因.我没有找到通胀错误的原因.
| 归档时间: |
|
| 查看次数: |
9710 次 |
| 最近记录: |