gpt4 book ai didi

android - 编写 : How to have ime padding and Scaffold padding with edge-to-edge and windowSoftInputMode is adjustResize

转载 作者:行者123 更新时间:2023-12-05 04:22:45 27 4
gpt4 key购买 nike

androidx.compose.material3.Scaffold 填充错误地添加了导航栏填充,即使在打开软键盘时添加了 IME 填充,导致导航栏填充量加倍(请参见下面的屏幕截图,分隔线应该接触到软键盘的顶部)。

我正在尝试让以下东西协同工作:

  1. 应用程序是 edge-to-edge
  2. windowSoftInputModeadjustResize
  3. 将我的内容放入 androidx.compose.material3.Scaffold

这是 MainActivity 的代码:

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
MyComposeApplicationTheme {
Scaffold(
topBar = {
TopAppBar(
title = { Text(text = stringResource(id = R.string.app_name)) }
)
},
) { scaffoldPadding ->
Box(
modifier = Modifier
.fillMaxSize()
.padding(scaffoldPadding),
contentAlignment = Alignment.BottomCenter
) {
OutlinedTextField(
value = "",
onValueChange = {},
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
)
Divider()
}
}
}
}
}
}

它是这样的: enter image description here

但是,如果我打开键盘,屏幕不会正确调整大小,尽管在 AndroidManifest 中为 Activity 设置了 android:windowSoftInputMode="adjustResize" 属性: enter image description here

如果我使用 Modifier.imePadding(),情况正在改善,但现在除了 IME 的填充之外,还有考虑到填充的脚手架的内部填充对于导航栏,即使键盘打开也是如此: enter image description here

在添加 IME 填充时保持脚手架底部填充而不添加导航栏填充的正确方法是什么?

编辑
我怀疑这是 Scaffold 的错误,所以我在跟踪器上创建了一个问题:https://issuetracker.google.com/issues/249727298

最佳答案

目前没有干净的解决方案,但以下解决方法似乎工作正常:将 WindowInsets(0, 0, 0, 0) 传递给 Scaffold 然后应用 .padding(scaffoldPadding).consumedWindowInsets(scaffoldPadding).systemBarsPadding() 在内部,或者也在内部应用 imePadding()

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
MyComposeApplicationTheme {
Scaffold(
modifier = Modifier.imePadding(),
topBar = {
TopAppBar(
title = { Text(text = stringResource(id = R.string.app_name)) }
)
},
bottomBar = {
BottomAppBar() {
IconButton(onClick = { }) {
Icon(Icons.Default.Build, null)
}
}
},
contentWindowInsets = WindowInsets(0, 0, 0, 0)
) { scaffoldPadding ->
Box(
modifier = Modifier
.fillMaxSize()
.padding(scaffoldPadding)
.consumedWindowInsets(scaffoldPadding)
.systemBarsPadding(),
contentAlignment = Alignment.BottomCenter
) {
OutlinedTextField(
value = "",
onValueChange = {},
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)

)
Divider()
}
}
}
}
}
}

关于android - 编写 : How to have ime padding and Scaffold padding with edge-to-edge and windowSoftInputMode is adjustResize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73894748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com