Jetpack Compose – 如何检查键盘是否打开或关闭

huangapple go评论60阅读模式
英文:

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

问题

我正在使用Jetpack Compose,并尝试找到一种检测键盘是否打开的方法。

我尝试使用下面的代码,但是出现了一个错误,显示“未解析的引用:ime”。当我点击推荐的导入(下面显示的两个)时,这个错误仍然存在。

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

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

我该如何解决这个问题?

英文:

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

得分: 1

**在 build.gradle 文件中为您的应用程序或模块添加所需的依赖项**

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.3.2"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

示例:

@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
        }
    }
}
英文:

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

huangapple
  • 本文由 发表于 2023年1月9日 02:20:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/75050294.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定