Rob*_*rdi 20 android material-design android-jetpack-compose edge-to-edge
即使在软键盘打开时,填充androidx.compose.material3.Scaffold也会错误地添加导航栏填充,并且会添加 IME 填充,从而导致导航栏填充量增加一倍(请参见下面的屏幕截图,分隔线应接触软键盘的顶部)。
我正在尝试让以下事情一起工作:
windowSoftInputMode是adjustResizeandroidx.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()
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我打开键盘,尽管活动集
android:windowSoftInputMode="adjustResize"内有该属性,但屏幕无法正确调整大小:AndroidManifest
如果我使用Modifier.imePadding(),情况会有所改善,但现在除了 IME 的填充之外,还有脚手架的内部填充,即使在键盘打开时,它也会考虑导航栏的填充:

添加 IME 填充时保持脚手架底部填充而不添加导航栏填充的正确方法是什么?
编辑
我怀疑这是一个错误,Scaffold所以我在跟踪器上创建了一个问题:https ://issuetracker.google.com/issues/249727298
Rob*_*rdi 15
目前没有干净的解决方案,但以下解决方法似乎工作正常:传递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()
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5187 次 |
| 最近记录: |