【问题标题】:In Android, detect soft Keyboard is visible or not? but not via OnGlobalLayoutListener在Android中,检测软键盘是否可见?但不是通过 OnGlobalLayoutListener
【发布时间】:2023-03-15 01:32:01
【问题描述】:

Android 开发者您好,

我们可以通过设置一个OnGlobalLayoutListener来检测软键盘。

当窗口的高度发生变化时,我们可以根据我们知道键盘是否可见进行一些计算。 lot of discussion you can find here (link) 当我们使用 windowSoftInputMode 作为 adjustResize

时,这将起作用

在我的场景中,我使用 adjustPan 作为 windowSoftInputMode,当软键盘可见时,窗口大小不会改变。 (不要告诉将 windowSoftInputMode 更改为“adjustResize”)

我知道我们可以使用 isAcceptingText 在 Context.INPUT_METHOD_SERVICE 中实现,但我无法实现,因为我的应用中有很多 EditView。

我知道他们没有任何广播接收器来收听软键盘的可见性。

我们有什么方法可以实现/检测软键盘可见性和隐藏/不可见

请说出你的想法。提前感谢您的回答。

【问题讨论】:

    标签: android android-activity keyboard android-manifest android-keypad


    【解决方案1】:

    这对我有用:

    使用此方法获取软键盘高度:

    public static int getSoftKeyboardHeight(Activity activity, int screenHeight) {
        Rect r = new Rect();
        View rootview = activity.getWindow().getDecorView();
        rootview.getWindowVisibleDisplayFrame(r);
        return screenHeight - r.height();
    }
    

    如果返回的高度为 0,则表示键盘不可见,否则键盘可见。 请注意,这应该连续运行(当怀疑键盘被打开/关闭时),所以我认为最好为这个检查生成一个单独的线程,以免在 UI 线程上执行额外的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2014-03-22
      • 2011-01-10
      相关资源
      最近更新 更多