0

如果打开键盘,则下一个代码在 Android 11 (30 API) 上返回true(for 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即使未打开键盘(不可见)也会返回

4

1 回答 1

0

尝试android:windowSoftInputMode="adjustResize"在 AndroidManifest.xml 文件中添加您的活动。

另请查看此答案以获取更多详细信息:https ://stackoverflow.com/a/66805360/949280

于 2021-12-11T19:56:34.190 回答