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

Material 3 Jetpack Compose:三点按钮与Project X垂直居中对齐问题

解决Jetpack Compose中AgendaCard顶部元素垂直居中对齐问题

问题现状

当前AgendaCard组件的三点按钮(OptionButton)与左侧Project X文本无法垂直居中对齐,实际效果如下:

当前效果

目标是实现Figma设计图中的对齐效果:

Figma设计图

问题原因

你原本将左侧状态图标+文本和OptionButton分别放在Box的两个独立子节点中,各自设置top padding,没有通过统一容器控制垂直对齐,导致两者垂直位置无法同步。

修改方案

将顶部所有元素(状态图标、Project X文本、OptionButton)放入同一个Row容器,利用Row的verticalAlignment属性实现整体垂直居中,同时通过weight属性让左侧内容占据剩余空间,确保OptionButton固定在右侧。

修改后的完整代码

@Composable
fun AgendaCard(
    modifier: Modifier = Modifier,
    isAgendaCompleted: Boolean = true
) {
    Box(
        modifier = modifier
            .fillMaxWidth()
            .height(120.dp)
            .background(color = Color.Green, shape = RoundedCornerShape(22.dp))
    ) {
        Column {
            // 用统一Row包裹顶部所有元素,实现垂直居中对齐
            Row(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(start = 16.dp, top = 16.dp, end = 16.dp),
                verticalAlignment = Alignment.CenterVertically
            ) {
                val agendaStatusIcon = if (isAgendaCompleted) {
                    painterResource(id = R.drawable.completed)
                } else {
                    painterResource(id = R.drawable.incomplete)
                }
                Icon(painter = agendaStatusIcon, contentDescription = "Agenda status")
                Spacer(modifier = Modifier.width(16.dp))
                // 给Text添加weight,让它占据Row剩余空间,OptionButton自动居右
                Text(text = "Project X", modifier = Modifier.weight(1f))
                OptionButton()
            }
            Spacer(modifier = Modifier.height(14.dp))
            Text(
                modifier = Modifier.padding(start = 48.dp),
                text = "This is the project tasky that needs"
            )
        }
        Text(
            modifier = Modifier.padding(bottom = 12.dp, end = 16.dp).align(Alignment.BottomEnd),
            text = "Mar 5, 10:30 - Mar 5, 11:00"
        )
    }
}

@Composable
fun OptionButton(
    modifier: Modifier = Modifier,
    color: Color = MaterialTheme.colorScheme.DarkOptionButton
) {
    Row(modifier.wrapContentWidth()) {
        Icon(
            painter = painterResource(id = R.drawable.white_dot),
            contentDescription = "option button 1",
            tint = color
        )
        Spacer(modifier = Modifier.width(3.dp))
        Icon(
            painter = painterResource(id = R.drawable.white_dot),
            contentDescription = "option button 2",
            tint = color
        )
        Spacer(modifier = Modifier.width(3.dp))
        Icon(
            painter = painterResource(id = R.drawable.white_dot),
            contentDescription = "option button 3",
            tint = color
        )
    }
}

关键修改点

  • 移除原Box中独立的两个子节点,替换为包含所有顶部元素的Row容器
  • 给Row设置verticalAlignment = Alignment.CenterVertically,确保所有子元素垂直居中
  • 为Project X的Text添加Modifier.weight(1f),使其占据Row剩余空间,迫使OptionButton固定在右侧
  • 移除OptionButton单独的top padding,依赖Row的统一padding控制位置

这样修改后,三点按钮就能与左侧文本完美垂直对齐,符合设计要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:39:54