如何在 Android 中检查软件键盘的可见性?
在某些情况下,我们应该确定在给定活动中是否显示键盘。在此示例中,我们可以看到如何验证 Android 上是否存在虚拟键盘。随着 Android 11 预览版 2 和此处的发布,用于监听键盘更改的平台行为似乎终于实现了!这似乎在幕后使用了 WindowInsets,因此很可能会向后移植到以前的 Android 版本。
那么目前的产品有什么问题呢?
您想知道 Android 键盘现在是否打开。不是很简单吗?
不,不是的。 Android 键盘是一种出色的设计,它在内部管理其大部分可见性——依赖于用户输入而不是开发人员输入。当它起作用时,它是一个很棒的系统……直到它不起作用。因为 Android 没有提供一种直接的方法来识别键盘是否打开,所以我们必须有点创意。 View 类包含一个名为 getWindowVisibleDisplayFrame 的有用方法,该方法返回一个矩形,该矩形包含用户可见的视图部分。这包括可能位于视图顶部的系统装饰(例如键盘)。
Kotlin
val keyboardVisible = Rect()
someRandomView.getWindowVisibleDisplayFrame(keyboardVisible)
Java
if (oldAltitude < newAltitude) {
if (keyboardVisibleState) {
keyboardVisibleState = false;
stopNav();
if (keyboardChecker != null) {
keyboardChecker.onKeyboardHidden();
}
} else if (oldAltitude > newAltitude) {
InputMethodManager gfg = (InputMethodManager) mContentView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isAcceptingText = gfg.isAcceptingText();
if (isAcceptingText) {
keyboardVisibleState = true;
}
if (keyboardVisibleState) {
if (keyboardChecker != null) {
keyboardChecker.onKeyboardVisible();
}
}
}
}
可见高度可以从可见矩形计算。我们可以通过将可见高度与视图的实际高度进行比较来判断键盘是否已绘制在图像之上。 (提示:这也可以用来确定键盘的高度。)然后这样做:
Java
if (oldAltitude < newAltitude) {
if (keyboardVisibleState) {
keyboardVisibleState = false;
stopNav();
if (keyboardChecker != null) {
keyboardChecker.onKeyboardHidden();
}
} else if (oldAltitude > newAltitude) {
InputMethodManager gfg = (InputMethodManager) mContentView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isAcceptingText = gfg.isAcceptingText();
if (isAcceptingText) {
keyboardVisibleState = true;
}
if (keyboardVisibleState) {
if (keyboardChecker != null) {
keyboardChecker.onKeyboardVisible();
}
}
}
}
结论
如果按下按钮后键盘可见,我们使用 hideSoftKeyboard 将其隐藏。最后,启动应用程序并在您的移动设备上查看结果。在这篇博客中,我们学习了如何判断键盘是否显示在屏幕上。如果键盘可见,我们也有如何关闭它。本篇博客到此结束。