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

Jetpack Compose中如何在Alert Dialog标题后添加Divider

解决Material3 AlertDialog标题后添加Divider显示在上方的问题

问题原因

Material3的AlertDialog标题区域默认使用了Arrangement.Bottom的垂直排列策略,当你直接在title参数中放置多个组件时,它们会从容器底部开始向上排列,导致Divider出现在标题文本的上方。

解决方案

在title的内容中嵌套一个自定义的Column组件,显式设置垂直排列为Arrangement.Top,让组件按照从上到下的顺序渲染。同时可以给Divider添加顶部内边距,优化视觉间距。

修改后的代码

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Divider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.letsgetchecked.app.common.DialogOptionsData

@Composable
fun <T> DialogOptionsView(
    optionData: DialogOptionsData<T>,
) {
    AlertDialog(
        onDismissRequest = {},
        confirmButton = {},
        title = {
            Column(verticalArrangement = Arrangement.Top) {
                Text(text = optionData.header)
                // 添加顶部内边距,让分割线和标题保持合适间距
                Divider(modifier = Modifier.padding(top = 8.dp))
            }
        },
        text = {
            LazyColumn {
                items(optionData.items) {
                    Text(text = "$it")
                }
            }
        },
    )
}

@Preview(showBackground = true)
@Composable
fun PreviewDialogOptions() {
    val items = listOf(1, 2)
    val dataItems = DialogOptionsData(header = "Header", items = items)
    DialogOptionsView(dataItems)
}

说明

自定义的Column会覆盖AlertDialog标题区域默认的排列规则,让标题文本和Divider按照你预期的顺序显示。添加8.dp的顶部内边距是为了符合Material Design的视觉规范,你可以根据需求调整这个数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:40:14