【发布时间】:2019-04-27 13:21:42
【问题描述】:
我正在构建一个简单的 Hangman 应用。我目前已将键盘设置为在用户触摸提交按钮后隐藏并将 EditText 限制为“1”的 maxLength。
我想要的是让键盘在用户触摸字母键并成功在 EditText 中输入有效条目后立即隐藏。我已经尝试实现使用 here 的 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 事件,但还是没有。
我可能缺少一个简单的解决方案,但我认为我没有只见树木不见森林。我希望这不是重复的,但我终其一生都无法找到如何让它发挥作用的解决方案。请帮忙?
【问题讨论】:
-
什么不起作用?是不是键盘没有隐藏?是不是检测不到哪个键被按下了?
-
是的。按下键时键盘不会隐藏。
标签: java android android-edittext