4

很简单: inputField.setImeOptions(EditorInfo.IME_ACTION_DONE); 用来让我的软键盘显示“完成”键而不是回车。

由于我将手机(三星 Galaxy S)更新为姜饼,这行代码没有任何效果。

有任何想法吗?

4

3 回答 3

9

我也看到过这个问题,我相信它发生在你没有设置inputType. 实际上,如果设置为(默认值) ,则所有imeOptions属性(以及其他一些属性)都会被完全忽略。inputTypeEditorInfo.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 等效项)。

话虽如此。我对您的个人设备可能完全错误,但我认为这很容易测试并且似乎总能解决我的问题,所以我应该分享。

于 2013-02-11T15:16:50.900 回答
5

我一直在研究同样的问题。您设备上的 IME(输入法编辑器)有问题,不会在软键盘上显示完成按钮或下一步按钮。HTC sense 有自己的软键盘,不识别 ime 指令。还有其他的,你的三星显然是其中之一。这是我第一次陷入 android 碎片化。

我确实尝试在 XML 中设置它,膨胀并创建一个辅助类,以及一堆其他东西。我松了一口气,发现它根本不起作用。

所以现在我们必须添加一个完成按钮,而不是键盘编辑器完成输入。我使用相对布局将其添加到编辑文本的末尾以对齐它们。将 IME 代码留给那些具有该功能的人......这是唯一的快速解决方案,另一个是为您的应用程序编写一个完整的自定义软键盘。

于 2012-04-10T03:55:09.217 回答
1

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.

于 2015-05-17T13:59:36.550 回答