很简单:
inputField.setImeOptions(EditorInfo.IME_ACTION_DONE);
用来让我的软键盘显示“完成”键而不是回车。
由于我将手机(三星 Galaxy S)更新为姜饼,这行代码没有任何效果。
有任何想法吗?
很简单:
inputField.setImeOptions(EditorInfo.IME_ACTION_DONE);
用来让我的软键盘显示“完成”键而不是回车。
由于我将手机(三星 Galaxy S)更新为姜饼,这行代码没有任何效果。
有任何想法吗?
我也看到过这个问题,我相信它发生在你没有设置inputType
. 实际上,如果设置为(默认值) ,则所有imeOptions
属性(以及其他一些属性)都会被完全忽略。inputType
EditorInfo.TYPE_NULL
所以试一试其中一个(我选择了next
,但你可以输入任何类型):
XML:
android:inputType="text"
android:imeOptions="actionNext"
JAVA
text.setInputType(EditorInfo.TYPE_CLASS_TEXT);
text.setImeOptions(EditorInfo.IME_ACTION_NEXT);
如果您真的想发疯,您可以使用setImeActionLabel('Add', SOME_ID)
并完全配置操作键(也有 xml 等效项)。
话虽如此。我对您的个人设备可能完全错误,但我认为这很容易测试并且似乎总能解决我的问题,所以我应该分享。
我一直在研究同样的问题。您设备上的 IME(输入法编辑器)有问题,不会在软键盘上显示完成按钮或下一步按钮。HTC sense 有自己的软键盘,不识别 ime 指令。还有其他的,你的三星显然是其中之一。这是我第一次陷入 android 碎片化。
我确实尝试在 XML 中设置它,膨胀并创建一个辅助类,以及一堆其他东西。我松了一口气,发现它根本不起作用。
所以现在我们必须添加一个完成按钮,而不是键盘编辑器完成输入。我使用相对布局将其添加到编辑文本的末尾以对齐它们。将 IME 代码留给那些具有该功能的人......这是唯一的快速解决方案,另一个是为您的应用程序编写一个完整的自定义软键盘。
I've checked inside the method TextView.setInputType
and at the end of this method, InputMethodManager restarts the keyboard. So this is the trigger to change the imeOptions, not InputType.TYPE_NULL.
private void changeInputTypeAndImeOptions(EditText fieldValue, int inputType, int imeOption) {
if (inputType == InputType.TYPE_NULL) inputType = fieldValue.getInputType();
fieldValue.setImeOptions(imeOption | EditorInfo.IME_FLAG_NO_FULLSCREEN);
//Makes the trigger for the imeOptions to change while typing!
//fieldValue.setInputType(InputType.TYPE_NULL);
fieldValue.setInputType(inputType);
InputMethodManager imm = (InputMethodManager)
mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) imm.restartInput(fieldValue);
}
NOTE:
Setting the setInputType with same previous value, doesn't give any effect so better to restart imm (this doesn't close the kb, only refreshes the buttons).
Also fieldValue.setInputType(InputType.TYPE_NULL);
has a bad effect the return button is visible during the multiple set, that's why is commented and it should be removed. Better restart the kb with imm.