在Jelly Bean / KitKat中输入隐藏Android软键盘

时间:2014-03-27 01:46:30

标签: android keyboard android-softkeyboard

我希望键盘在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键时,没有记录任何内容。有什么方法可以实现我正在寻找的行为吗?

1 个答案:

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