我希望键盘在Enter
上隐藏某个EditText
。
我实现了这个:
myEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if ((keyEvent!= null) && (keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(editTextAnswer.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
return true;
}
return false;
}
});
这适用于许多键盘,但不适用于AOSP键盘(使用Jelly Bean和KitKat设备进行测试)。我试过添加
android:imeOptions="actionGo"
到EditText
并检查操作ID,但这也不起作用。我在onEditorAction(...)
中添加了日志记录代码,当我点击AOSP键盘上的Enter
键时,没有记录任何内容。有什么方法可以实现我正在寻找的行为吗?
答案 0 :(得分:2)
尝试设置 OnKeyListener :
myEditText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
switch (arg1) {
case KeyEvent.KEYCODE_ENTER:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
return true;
default:
break;
}
return false;
}
});
并尝试将 OnEditorActionListener 更改为以下内容:
myEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int actionId,
KeyEvent arg2) {
// hide the keyboard and search the web when the enter key
// button is pressed
if (actionId == EditorInfo.IME_ACTION_GO
|| actionId == EditorInfo.IME_ACTION_DONE
|| actionId == EditorInfo.IME_ACTION_NEXT
|| actionId == EditorInfo.IME_ACTION_SEND
|| actionId == EditorInfo.IME_ACTION_SEARCH
|| (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
return true;
}
return false;
}
});
根据EditText的不同,会显示不同的输入键,有时它会显示已完成,有时会输入,有时会输入。您需要使用所有标志来确定输入按钮的可能状态,以便获取它。 KEYCODE_ENTER通常不会传递给EditorActionListener,虽然我将其包含在物理键盘中,但您可以使用OnKeyListener捕获KEYCODE_ENTER。