我正在构建一个简单的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事件,但仍然没有。
可能缺少一个简单的解决方案,但我认为我没有看到树木茂盛的森林。我希望这不是重复的,但我一生无法找到解决方案,以使其正常工作。请帮忙吗?
答案 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);
}