rew*_*oes 8 windowinsets android-jetpack-compose jetpack-compose-accompanist
我Scaffold在主屏幕上使用了一个bottomBar在应用程序的每个屏幕中都可见的固定屏幕,并且我将 的 应用于innerPadding其Scaffold内容。
我希望键盘出现在 之上bottomBar,为此我将imePadding()only应用于Scaffold应用于的内容。
但是,当键盘打开时,Scaffold和innerPadingimePadding()都会应用于内容填充。
我尝试过伴奏插入迁移,但并不幸运。
无论如何,我可以阻止它并仅应用其中之一吗?
这是我的一段代码:
Scaffold(
topBar = { },
bottomBar = { },
modifier = Modifier
.systemBarsPadding()
) { innerPadding ->
Content(
modifier = Modifier
.padding(innerPadding)
.imePadding()
)
}
Run Code Online (Sandbox Code Playgroud)
这是结果:
对于现在已弃用的伴奏插图,我使用了以下解决方案:
val isImeVisible = LocalWindowInsets.current.ime.isVisible
val contentPadding = remember(isImeVisible) {
if (isImeVisible) PaddingValues(top = innerPadding.calculateTopPadding()) else innerPadding
}
Run Code Online (Sandbox Code Playgroud)
从1.4.0开始你可以使用 system WindowInsets.isImeVisible. 对于 1.3.0,请参阅下面的答案:
根据伴奏插入的迁移,LocalWindowInsets.current.ime应替换为WindowInsets.ime。
isVisible目前还没有,直到这个错误得到修复。以下是我现在重新创建它的方法:
val WindowInsets.Companion.isImeVisible: Boolean
@Composable
get() {
val density = LocalDensity.current
val ime = this.ime
return remember {
derivedStateOf {
ime.getBottom(density) > 0
}
}.value
}
Run Code Online (Sandbox Code Playgroud)
用法:
val isImeVisible = WindowInsets.isImeVisible
Run Code Online (Sandbox Code Playgroud)
这应该适用于您的旧remember(isImeVisible)代码。
| 归档时间: |
|
| 查看次数: |
5144 次 |
| 最近记录: |