Android:按下键盘输入按钮的捕捉动作

时间:2014-08-05 10:07:28

标签: android keyboard android-edittext

我正在尝试响应在屏幕软键盘上按下标准系统上的输入按钮,在数字模式下。当myCustomEditText类被赋予焦点时,屏幕上会出现键盘。

尝试了两种方法:

  1. 覆盖onKeyDown()
  2. 
    
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                //do sth..
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    
    
    1. 设置监听器setOnKeyListener
    2. 
          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_...

      的问题

      我的问题是: 为什么这些方法没有被输入键,但是用于其他键,以及如何正确地按下输入键?

1 个答案:

答案 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