Ale*_*dro 44 android android-input-method
我是Android原生开发的新手,我正在试图弄清楚如何自定义IME动作按钮.我查看了Google文档,但我发现很少有关于预期行为的信息.
从官方指南中我了解到可以使用以下属性配置键盘操作按钮:
但经过一些经验尝试后,我发现API级别15和下一个API级别之间存在不同的行为.
我已经设置了一个具有以下属性的简单EditText元素:
<EditText
...
android:imeOptions="actionGo"
android:imeActionLabel="Custom"
android:imeActionId="666"
android:inputType="text"/>
Run Code Online (Sandbox Code Playgroud)
我已经在纵向和横向模式下检查了不同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 15和16+中获得这个吗?或者,如果有一种方法可以在API版本的所有(或至少部分)中获得一致的行为?
也许我在IME设置中遗漏了一些可以证明不同行为的东西......
非常感谢你!
Clo*_*eam 10
只需.setImeActionLabel()
在java代码中以编程方式调用,将actionID(再次)设置为您想要的.
editText.setImeActionLabel(getString(R.string.xxx), EditorInfo.IME_ACTION_GO);
Run Code Online (Sandbox Code Playgroud)
实际上取决于输入法应用程序,而不是Android框架本身,决定如何处理您设置的值.
Android框架只是将您设置的值传递给输入法,然后输入法可以选择键盘上显示的按钮或EditText
全屏视图中的"提取"按钮.Android框架EditorInfo
以两种方式影响: -
它通过它EditorInfo.makeCompatible
来确保其中的值在键盘和应用程序之间是兼容targetApiVersion
的.目前这仅影响某些InputType
值,而不影响编辑器操作,但如果引入新的编辑器操作(或全新设置),则可能会更改.
它设置输入方法的默认行为,包括全屏编辑器的行为.如果输入法选择不覆盖此默认行为,则最终可能会导致Android版本之间的行为不同.许多键盘确实选择以Android版本之间的一致方式设置自己的行为.
出于这个原因,说某个EditorInfo
字段对任何给定版本都有一定影响并不是那么简单,即使在一个Android版本上也无法确保一致的行为.您所做的只是为输入方法提供提示,输入方法选择如何将其呈现给用户.
当您开始一个新的 Android 项目时,它为您的问题提供了一个很好的提示。有一个名为 Activity 的活动LoginActivity
,您可以将其创建为默认登录屏幕。此活动将产生EditText
如下:
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
Run Code Online (Sandbox Code Playgroud)
现在,如果您阅读文档,您就会知道该imeOptions
属性允许您为文本字段指定其他操作。例如,弹出的键盘在右下角有一个类似“下一步”的动作。使用imeOptions
您可以从 Android 提供的预定义列表中选择另一个操作。您可以指定诸如“actionSend”或“actionSearch”之类的内容。
一旦你这样做了,为了你的 Activity,你可以使用setOnEditorActionListener
事件处理程序来监听那个动作:
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
请注意我们如何定位imeActionId
此处。这是EditText
在您的 Activity 中定位它的另一种方法,同时还可以灵活地更改键盘输入上的操作。
归档时间: |
|
查看次数: |
41098 次 |
最近记录: |