我有一个EditText,其ImeOptions设置为EditorInfo.IME_ACTION_NEXT。因此,当聚焦场时,键盘上会显示“下一步”按钮。 我希望按钮在用户输入时更改为“完成”(由于某些原因)。 所以我有一个TextWatcher,我尝试在“afterTextChanged”上将ImeOptions更改为EditorInfo.IME_ACTION_DONE,但键盘上的键不会改变。 我试图隐藏键盘,更改ImeOptions并再次显示键盘但它不起作用(此解决方案适用于iOS)。
有人知道该怎么做吗?
答案 0 :(得分:1)
我试过这个并且它有效,问题是你有时可以看到键盘何时出现并消失。
@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);
}
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)
根据以上答案:
// Restart the input on the current focused EditText
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.restartInput(editText);
只有重新启动输入才能达到目的。否则,预计键盘闪烁。输入重新启动也不会清除字段的内容,即不会导致数据丢失,这是理想的行为。