Jetpack Compose - how to check if keyboard is open or closed

1.2k views Asked by At

I'm using Jetpack Compose and trying to find a way to detect if the keyboard is open.

I've tried to use the below code, but I get an error stating Unresolved reference: ime. When I click on the recommended imports (the 2 shown below), this error still remains.

import android.view.WindowInsets
import android.view.WindowInsets.Type.ime

@Composable
fun signInView() {
   val isVisible = WindowInsets.ime.getBottom(LocalDensity.current) > 0
}

How can I resolve this?

1

There are 1 answers

0
Halifax On BEST ANSWER

Add the dependencies for the artifacts you need in the build.gradle file for your app or module:

dependencies {
    implementation "androidx.compose.foundation:foundation:1.3.1"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.3.2"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Example:

 @Composable
    fun signInView() {
    var isVisible by remember { mutableStateOf(false) }
    val ime = androidx.compose.foundation.layout.WindowInsets.ime
    val navbar = androidx.compose.foundation.layout.WindowInsets.navigationBars
    var keyboardHeightDp by remember { mutableStateOf(0.dp) }
    val localDensity = LocalDensity.current
    LaunchedEffect(localDensity.density) {
        snapshotFlow {
            ime.getBottom(localDensity) - navbar.getBottom(localDensity)
        }.collect {
            val currentKeyboardHeightDp = (it / localDensity.density).dp
            keyboardHeightDp = maxOf(currentKeyboardHeightDp, keyboardHeightDp)
            isVisible = currentKeyboardHeightDp == keyboardHeightDp
        }
    }
}