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



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

我想要的是在用户触摸字母键并成功地将有效条目输入到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事件,但仍然没有。

我可能错过了一个简单的解决方案,但我想我看不到森林里的树木。我希望这不是重复的,但我一辈子都找不到如何让它发挥作用的解决方案。请帮忙?

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

最新更新