8

我有一个将 ImeOptions 设置为 EditorInfo.IME_ACTION_NEXT 的 EditText。因此,当字段获得焦点时,键盘上会显示“下一步”按钮。我希望按钮在用户键入时更改为“完成”(出于某些原因)。所以我有一个 TextWatcher,我尝试在“afterTextChanged”上将 ImeOptions 更改为 EditorInfo.IME_ACTION_DONE,但键盘上的键没有改变。我试图隐藏键盘,更改 ImeOptions 并再次显示键盘,但它不起作用(此解决方案适用于 iOS)。

有人知道该怎么做吗?

4

3 回答 3

2

我试过这个并且它有效,问题是你有时可以看到键盘何时出现和消失。

@Override
public void afterTextChanged(Editable s) {

    if (/*condition*/) {

        // Change the IME of the current focused EditText
        editText.setImeOptions(EditorInfo.IME_ACTION_DONE);


        // Hide the keyboard
        hideKeyboard(activity);

        // Restart the input on the current focused EditText
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.restartInput(editText);

        // Show the keyboard
        showKeyboard(activity);
    }
}
于 2016-05-23T12:06:59.500 回答
1

你可以尝试这样的事情:

if (your condition) {


    youreditText.setImeOptions(EditorInfo.IME_ACTION_DONE);
    hideKeyboard(activity);
    InputMethodManager input= (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    input.restartInput(youreditText);

    showKeyboard(youractivity);
}
于 2016-05-23T12:10:08.297 回答
1

从上面的答案:

// Restart the input on the current focused EditText
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.restartInput(editText);

只有重新启动输入才能解决问题。否则,可能会出现键盘闪烁。输入重新启动也不会清除字段的内容,即不会导致数据丢失,这是所需的行为。

于 2020-07-07T13:11:03.270 回答