androidx.compose.material3.Scaffold
填充错误地添加了导航栏填充,即使在软键盘打开时添加了IME填充,导致导航栏填充量加倍(参见下面的屏幕截图,分隔符应该接触软键盘的顶部)。
我想把下面的事情结合起来:
1.应用程序为edge-to-edge
windowSoftInputMode
是adjustResize
1.将我的内容放在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()
}
}
}
}
}
}
字符串
它看起来是这样的:
的数据
但是,如果我打开键盘,屏幕无法正确调整大小,尽管在AndroidManifest
中为Activity设置了android:windowSoftInputMode="adjustResize"
属性:
的
如果我使用Modifier.imePadding()
,情况会有所改善,但现在除了IME的填充外,还有Scaffold的内部填充,即使在键盘打开时也会考虑导航栏的填充:
的
什么是正确的方法来保持脚手架底部填充没有它添加导航栏填充时,输入法填充?
编辑
我怀疑这是Scaffold
的一个bug,所以我在跟踪器上创建了一个问题:https://issuetracker.google.com/issues/249727298的
2条答案
按热度按时间2skhul331#
目前没有干净的解决方案,但以下解决方案似乎工作正常:将
WindowInsets(0, 0, 0, 0)
传递到Scaffold
,然后在内部应用.padding(scaffoldPadding).consumedWindowInsets(scaffoldPadding).systemBarsPadding()
,或者也在内部应用imePadding()
。字符串
bbuxkriu2#
每当键盘打开时,由于某些原因,scaffoldPadding中的值都是错误的。
我有一个TopBar,但没有BottomBar。ScaffoldPadding值应为:
但是(只有在键盘打开后):
就个人而言,要解决我的问题,有一个额外的底部填充在脚手架是不适用于给定的脚手架填充。
字符串