用户释放按键后如何隐藏默认的Android软键盘

时间:2018-11-25 21:01:20

标签: java android android-edittext

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

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

更新***:澄清一下,输入按钮没有问题,可以正常工作。我希望用户触摸到他们猜测的字母后,键盘才能隐藏。因此,如果用户点击“ 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事件,但仍然没有。

可能缺少一个简单的解决方案,但我认为我没有看到树木茂盛的森林。我希望这不是重复的,但我一生无法找到解决方案,以使其正常工作。请帮忙吗?

1 个答案:

答案 0 :(得分:1)

这是您可以尝试做的。在您的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);
}