【发布时间】:2021-10-08 12:47:40
【问题描述】:
如果打开键盘,则下一个代码在 Android 11 (30 API) 上返回 true(对于 showingKeyboard),否则返回 false:
private fun registerGlobalLayoutListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.decorView.viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener)
}
}
private fun unregisterGlobalLayoutListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.decorView.viewTreeObserver.removeOnGlobalLayoutListener(globalLayoutListener)
}
}
@RequiresApi(Build.VERSION_CODES.M)
private val globalLayoutListener = ViewTreeObserver.OnGlobalLayoutListener {
val showingKeyboard =
WindowInsetsCompat.toWindowInsetsCompat(window.decorView.rootWindowInsets)
.isVisible(WindowInsetsCompat.Type.ime())
viewModel.setKeyboardShowing(showingKeyboard)
}
在 Android 6-10 (23-29) 上,即使键盘未打开(不可见),它也会返回 true
【问题讨论】:
标签: android android-virtual-keyboard android-window