我正在尝试响应在屏幕软键盘上按下标准系统上的输入按钮,在数字模式下。当myCustomEditText类被赋予焦点时,屏幕上会出现键盘。
尝试了两种方法:
onKeyDown()
:public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { //do sth.. return true; } return super.onKeyDown(keyCode, event); }
setOnKeyListener
:myCustomEditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { onRightButtonClicked(); return true; } return false; } });
(也在myCustomEditText中尝试onKeyDown()
,但没有效果)
问题是:
上面的这些方法适用于所有按下的按键,但对于输入键 - 这些方法甚至根本没有被触发。 (这不是坏KeyEvent.KEYCODE_...
)
我的问题是: 为什么这些方法没有被输入键,但是用于其他键,以及如何正确地按下输入键?
答案 0 :(得分:6)
您回复 ENTER 的方式与普通键不同,请尝试以下方法:
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_DONE:
...
return true;
default:
return false;
}
}
});
您可以通过在XML中指定android:imeOptions
或使用editText.setImeOptions(...)
中的一个常量调用EditorInfo
来指定 ENTER 执行的操作。 imeOptions
也会改变 ENTER 键的显示方式!例如,如果您将imeOptions
设置为actionSearch
,则 ENTER 键将显示为搜索按钮。
您可以找到imeOptions
的所有可能值的列表以及说明here。