【问题标题】:How to know when the keyboard is minimized?如何知道键盘何时最小化?
【发布时间】:2014-04-28 10:23:38
【问题描述】:

我想在键盘最小化后立即隐藏光标并做一些其他事情。我已经启用了光标并在触摸编辑文本时显示键盘,但是我无法找到一种方法来知道用户何时在不按“完成”的情况下将其最小化。

有没有办法做到这一点?

【问题讨论】:

    标签: android android-edittext android-softkeyboard keyevent


    【解决方案1】:

    试试下面的代码:-

    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
                new OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        Rect r = new Rect();
                        activityRootView.getWindowVisibleDisplayFrame(r);
    
                        int heightDiff = activityRootView.getRootView()
                                .getHeight() - (r.bottom - r.top);
                        if (lastDiff == heightDiff)
                            return;
                        lastDiff = heightDiff;
                        Log.i("aerfin","arefin "+lastDiff);
                        if (heightDiff > 100) { // if more than 100 pixels, its
                                                // probably a keyboard...
                            flag2 = 0;
                        } else {
                            if (flag == false)
                                flag2 = 1;
                        }
                    }
                });
    

    更多信息请参阅下面的链接,对我来说最少使用完整:-

    Maintain keyboard open/closed state for EditText when app comes to foreground

    How to check visibility of software keyboard in Android?

    【讨论】:

    • 谢谢!我最终使用了与此类似的版本,取自您第二个链接的后续答案之一。这有点笨拙,因为我需要设置的 EditText 深埋在布局结构中,所以我必须通过阶梯向下传递事件,但它会起作用。
    【解决方案2】:

    在您的清单中,通过将此行作为参数放在清单中的 <activity> 标记中,确保配置在键盘显示或隐藏时发生更改:

    android:configChanges="orientation|keyboardHidden"
    

    然后在您的Activity 中覆盖此方法。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    
        // Checks whether a hardware keyboard is available
        if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
            Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
        } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
            Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
        }
    }
    

    【讨论】:

    • 这似乎没有被称为软键盘:(
    【解决方案3】:
    InputMethodManager imm = (InputMethodManager)getSystemService(
          Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
    
    //to show soft keyboard
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    
    //to hide it, call the method again
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    

    【讨论】:

    • 他不是这么问的。您的代码显示或隐藏键盘,他想在用户手动显示或隐藏键盘时获得回调。
    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多