我正在尝试响应在数字模式下按下标准系统屏幕软键盘上的回车按钮。当 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()
,但没有效果)
问题是:
上面的这些方法适用于所有按下的键,但适用于 enter 键 - 这些方法甚至根本没有被触发。 (这不是坏的KeyEvent.KEYCODE_...
的问题)
我的问题是: 为什么这些方法不是针对回车键触发的,而是针对其他键触发的,以及如何监听正确按下的回车键?
最佳答案
您对 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(...)
来指定 ENTER 执行的操作> 使用 EditorInfo
中的常量之一。 imeOptions
还会更改 ENTER 键的外观!例如,如果您将 imeOptions
设置为 actionSearch
,则 ENTER 键将看起来像一个搜索按钮。
您可以找到 imeOptions
所有可能值的列表以及描述 here .
关于Android:捕获按下键盘输入按钮的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25136156/