You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中键盘遮挡TopAppBar或Bottom Bar异常问题求助

问题

我被这个问题困扰了一段时间,查了很多类似问题都没解决。我的核心需求如下:

  • 以Jetpack Compose作为根视图
  • 视图层级为Surface -> Scaffold -> 底部导航栏(Bottom Bar)中的内容
  • 输入框包裹在AndroidView内部,不过我觉得这不是关键问题
预期效果

界面包含顶部导航栏(TopAppBar)和底部导航栏,键盘弹出时,从底部导航栏上方滑入,且顶部导航栏始终保持可见。

实际表现
  • 不在Manifest文件中做任何配置时,顶部导航栏会被遮挡:
    未配置Manifest时TopAppBar被遮挡
    未配置Manifest时键盘弹出状态
  • 使用adjustResize模式时,底部导航栏会覆盖在键盘上方:
    adjustResize模式下BottomBar覆盖键盘
  • 尝试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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:58:18