首页 > 解决方案 > 如何在用户释放按键后隐藏默认的 Android 软键盘

问题描述

我正在构建一个简单的 Hangman 应用程序。我目前已将键盘设置为在用户触摸提交按钮后隐藏并将 EditText 限制为“1”的 maxLength。

我想要的是键盘在用户触摸字母键并成功输入有效条目到 EditText 后立即隐藏。我已尝试实现此处使用的 KeyEvent 方法,并对其进行了修改以使用 getMaxKeyCode() 方法侦听任何关键代码。

更新***:澄清一下,我对 ENTER 按钮没有问题,它工作正常。我希望在用户触摸他们猜测的任何字母后隐藏键盘。因此,如果用户点击“E”键,只要“E”字符出现在 EditText 字段中,键盘就会隐藏。

这是我在当前迭代中使用的一些代码:

 @OnClick(R.id.guess_button)
void submit() {
    submitLetter();
}

private void submitLetter() {
    Editable userInput = mGuessInput.getText();
    String guessStr = mUserInput.toString();
    if (mGuessStr.length() != 0) {
        checkGuess(
                String.valueOf(mGuessStr).charAt(0),
                mCodeWord.toUpperCase()
        );
        mUserInput.clear();
        mGuessInput.clearFocus();
        hideKeyboard(MainActivity.this);
    }
}
public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
   View view = activity.getCurrentFocus();
    if (view == null) {
        view = new View(activity);
    }
    if (imm != null) {
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}

这就是我要开始工作的内容:

public void hideKeyboardOnKeyTouch(EditText editText) {
    final int generatedKeyCode = KeyEvent.getMaxKeyCode();
    editText.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (event.getAction() == generatedKeyCode) {
             hideKeyboard(MainActivity.this);
            }
            return false;
        }
    });

}

然后我在 onCreate() 中调用 mGuessInput(EditText 视图)上的上述方法。我也试过用这种方法检查 ACTION_UP 事件,但仍然没有。

我可能缺少一个简单的解决方案,但我认为我没有只见树木不见森林。我希望这不是重复的,但我终其一生都无法找到如何让它发挥作用的解决方案。请帮忙?

标签: javaandroidandroid-edittext

解决方案


这是你可以尝试做的。在 EditText 上设置一个onKeyListener以查看按下了什么键,如下所示:

editText.setOnKeyListener(new OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (editText.getText().toString().length() == 1) { 
            hideKeyboard(MainActivity.this, <Your view here>);
        }
        return true;
    }
});

尝试将您的hideKeyboard功能更改为以下内容:

public static void hideKeyboardFrom(Context context, View view) {
    InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

推荐阅读