Jetpack Compose中键盘遮挡TopAppBar或Bottom Bar异常问题求助
问题
我被这个问题困扰了一段时间,查了很多类似问题都没解决。我的核心需求如下:
- 以Jetpack Compose作为根视图
- 视图层级为
Surface->Scaffold-> 底部导航栏(Bottom Bar)中的内容 - 输入框包裹在
AndroidView内部,不过我觉得这不是关键问题
预期效果
界面包含顶部导航栏(TopAppBar)和底部导航栏,键盘弹出时,从底部导航栏上方滑入,且顶部导航栏始终保持可见。
实际表现
- 不在
Manifest文件中做任何配置时,顶部导航栏会被遮挡:

- 使用
adjustResize模式时,底部导航栏会覆盖在键盘上方:
- 尝试
adjustPan模式,顶部导航栏依然会被遮挡。
代码
完整复现代码如下:
@OptIn(ExperimentalMaterial3Api::class) @Composable fun Screen() { val items = listOf( Triple("a", Icons.Default.Person, Icons.Filled.Person), Triple("b", Icons.Default.Notifications, Icons.Filled.Notifications), ) var selectedTab = items[0] val navHostController = rememberNavController() Scaffold( bottomBar = { NavigationBar { items.forEachIndexed { index, item -> selectedTab = item val isSelected = index == items.indexOf(selectedTab) NavigationBarItem( icon = { Icon( if (isSelected) item.second else item.third, contentDescription = null ) }, label = { Text(text = item.first) }, selected = isSelected, onClick = { navHostController.navigate(item.first) { popUpTo(navHostController.graph.findStartDestination().id) { saveState = true } launchSingleTop = true restoreState = true } } ) } } } ) { NavHost( navHostController, startDestination = items[0].first, Modifier.padding(it) ) { composable(items[0].first) { Scaffold(topBar = { TopAppBar( title = { Text(text = "Text", ) }, ) }) { AndroidView(modifier = Modifier.padding(it).fillMaxSize(), factory = { context -> val constraintLayout = ConstraintLayout(context) constraintLayout.setBackgroundColor(context.getColor(android.R.color.holo_red_dark)) val editText = EditText(context) editText.setText("Click here") editText.id = View.generateViewId() constraintLayout.addView(editText) val constraintSet = ConstraintSet() constraintSet.clone(constraintLayout) constraintSet.connect(editText.id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM) constraintSet.connect(editText.id, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START) constraintSet.connect(editText.id, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END) constraintSet.applyTo(constraintLayout) constraintLayout }) } } composable(items[1].first) { Column { Text("Second") Button(onClick = { navHostController.navigate( "nested/" + UUID.randomUUID().toString() ) }) { Text(text = "Go to nested") } } } composable("nested/{id}") { Text("nested") } } } }
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

