当 EditText 获得焦点时显示键盘,失去焦点时隐藏键盘

Show keyboard when an EditText gains focus and hide keyboard when it loses focus

问题不言自明。

编辑文本获得焦点时显示软键盘,失去焦点时隐藏键盘。这是我使用过的代码。

this.newTaskTitle = (EditText) taskCreationView.findViewById(R.id.newTaskTitle);
    this.newTaskTitle.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            //Set up input manager
            InputMethodManager keyboardManager = (InputMethodManager) getSystemService(
                    Context.INPUT_METHOD_SERVICE
            );
            if(hasFocus) {
                Log.i(TAG,"hasFocus");
                //Display keyboard
                keyboardManager.showSoftInput(
                        v,
                        InputMethodManager.SHOW_IMPLICIT
                );
            } else {
                Log.i(TAG,"lostFocus");
               //Hide keyboard
                keyboardManager.hideSoftInputFromInputMethod(
                        v.getWindowToken(),
                        0
                );
            }
        }
    });

即使 else 在 EditText 失去焦点时执行,键盘也永远不会隐藏。为什么会这样?

这不是隐藏键盘的正确方法吗?

我觉得,没有必要设置OnFocusChangeListener。从你的按钮的 onClick 调用下面的方法,在调用这个方法后设置你的 EditText.On 获得焦点软键盘的可见性 GONE 自动打开。

private  void hideKeyBoard(Context context, EditText editText) {
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }