【问题标题】:How to Hide Default Android Soft Keyboard After User Releases Key Press如何在用户释放按键后隐藏默认的 Android 软键盘
【发布时间】: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


【解决方案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);
}

【讨论】:

  • 你还有同样的行为吗?
  • 我认为问题可能出在您的hideKeyboard 函数上。
  • 我很困惑为什么它不起作用。我认为问题一定是隐藏键盘,而不是检查“输入”是否被按下的代码。
  • 我认为我对自己想要实现的目标还不够清楚。我对 ENTER 按钮没有问题,它工作正常。我希望在用户触摸他们猜测的任何字母后隐藏键盘。因此,如果用户点击“E”键,则只要“E”字符出现在 EditText 字段中,键盘就会隐藏。
  • 哦!我懂了!我以为是他们输入了字母然后按了输入。好的。
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多