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

Jetpack Compose对话框内使用Accompanist FlowRow滚动出现异常效果

问题原因
  • AlertDialog的text内容区默认没有限制最大高度,直接给FlowRow添加垂直滚动属性后,内容会无限延伸超出对话框边界,滚动时就会出现裁切、显示异常的问题
  • 子元素Modifier的设置顺序有误:Modifier.size(48.dp).padding(8.dp) 是先固定组件尺寸再添加内边距,会导致实际可绘制区域被压缩,也可能引发布局偏移
修复方案

修改思路如下:

  1. 在FlowRow外层套一个Box,给Box设置maxHeight限制滚动区域的最大高度,避免内容溢出对话框,数值可根据实际需求调整
  2. 调整子元素Modifier的顺序,改为先加padding再设置size,保证每个元素的显示大小符合预期
  3. 可选:如果使用Compose 1.4及以上版本,可以直接替换Accompanist的FlowRow为官方正式组件androidx.compose.foundation.layout.FlowRow,无需额外引入Accompanist依赖

修改后的完整代码:

@Composable
fun AlertDialogErrorTest() {
    var showDlg by remember { mutableStateOf(false)}
    val scrollState = rememberScrollState()
    if (showDlg) {
        AlertDialog(
            onDismissRequest = { showDlg = false },
            title = { Text(text = "Pick something from the list") },
            text = {
                // 新增外层Box限制滚动区域最大高度
                Box(modifier = Modifier.maxHeight(300.dp)) {
                    FlowRow(modifier = Modifier.verticalScroll(scrollState)) {
                        for (i in 1..100) {
                            // 调整Modifier顺序,先设置间距再固定尺寸
                            Box (
                                modifier = Modifier
                                    .padding(8.dp)
                                    .size(48.dp)
                                    .background(Color.LightGray),
                                contentAlignment = Alignment.Center
                            ) {
                                Text (i.toString())
                            }
                        }
                    }
                }
            },
            confirmButton = {
                TextButton(onClick = { showDlg = false }) {
                    Text("Done")
                }
            },
            dismissButton = {
                TextButton(onClick = { showDlg = false }) {
                    Text("Cancel")
                }
            }
        )
    }

    Button(onClick = {showDlg = true}) {
        Text("Show dialog")
    }
}

内容的提问来源于stack exchange,提问作者Mackan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:45:07