user924
user924

Reputation: 12293

WindowInsetsCompat.isVisible(WindowInsetsCompat.Type.ime()) returns true for Android 23-29, though keyboard is not opened

If keyboard is opened the next code returns true (for showingKeyboard) on Android 11 (30 API) or false otherwise:

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)
}

On Android 6-10 (23-29) it returns true even if keyboard is not opened (not visible)

Upvotes: 1

Views: 1673

Answers (1)

RufusInZen
RufusInZen

Reputation: 2189

Try adding android:windowSoftInputMode="adjustResize" to your activity in the AndroidManifest.xml file.

Also check this answer for more details: https://stackoverflow.com/a/66805360/949280

Upvotes: 0

Related Questions