在Android中,检测软键盘是否可见?但不是通过OnGlobalLayoutListener

时间:2015-09-16 09:49:54

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

Hello Android开发者,

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

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

时,这将有效

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

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

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

它们是否能够实现/检测软键盘可视性和隐藏/隐藏

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

1 个答案:

答案 0 :(得分:0)

这对我有用:

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

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线程上执行额外的工作。