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

Jetpack Compose中实现按钮内文本左右对齐同排显示

问题描述

我尝试在OutlinedButton中添加两段文本,要求第一段文本左对齐,第二段文本右对齐。以下是我尝试的代码:

OutlinedButton(
            colors = ButtonDefaults.outlinedButtonColors(Color.Transparent),
            border = BorderStroke(0.dp, Color.Transparent),
            modifier = Modifier.fillMaxWidth()
                               .background(
                color = Color.Transparent,
        shape = RectangleShape, // Oval shape

        //border = androidx.compose.ui.drawBorder(2.dp, Color.Red) // Border color and width
        ),
            onClick = {}
        ) {
            Row(modifier = Modifier.fillMaxWidth()) {
                Text(
                    modifier = Modifier.padding(horizontal = 0.dp, vertical = 0.dp),
                    color = Color.Black,
                    text = text,
                    textAlign = TextAlign.Start,
                    fontSize = 15.sp,
                )
                Text(
                    modifier = Modifier.padding(horizontal = 0.dp, vertical = 0.dp),
                    color = Color.Black,
                    text = ">",
                    textAlign = TextAlign.End,
                    fontSize = 15.sp,
                )
            }
        }

但实际效果不符合预期,两段文本都左对齐了,效果如图:
文本均左对齐的效果

解决方案

问题出在Row的布局逻辑上:默认情况下Row会让子元素紧凑排列,Text的textAlign属性仅在文本宽度占满可用空间时才会生效,当前两个Text都只占据自身内容宽度,所以设置textAlign无法达到预期效果。可以通过以下两种方式修复:

方式一:给左侧文本添加weight属性

给第一个Text添加weight(1f),让它占据Row内的所有剩余空间,右侧文本会被自动挤到最右端:

OutlinedButton(
    colors = ButtonDefaults.outlinedButtonColors(Color.Transparent),
    border = BorderStroke(0.dp, Color.Transparent),
    modifier = Modifier.fillMaxWidth()
        .background(
            color = Color.Transparent,
            shape = RectangleShape
        ),
    onClick = {}
) {
    Row(modifier = Modifier.fillMaxWidth()) {
        Text(
            modifier = Modifier.weight(1f),
            color = Color.Black,
            text = text,
            fontSize = 15.sp,
        )
        Text(
            color = Color.Black,
            text = ">",
            fontSize = 15.sp,
        )
    }
}

这里无需额外设置textAlign,左侧文本默认左对齐,右侧文本自然处于右端位置。

方式二:使用Spacer填充中间空间

在两个Text之间添加一个Spacer并设置weight(1f),让它占据Row内的所有中间可用空间,从而将两段文本分别推到左右两端:

OutlinedButton(
    colors = ButtonDefaults.outlinedButtonColors(Color.Transparent),
    border = BorderStroke(0.dp, Color.Transparent),
    modifier = Modifier.fillMaxWidth()
        .background(
            color = Color.Transparent,
            shape = RectangleShape
        ),
    onClick = {}
) {
    Row(modifier = Modifier.fillMaxWidth()) {
        Text(
            color = Color.Black,
            text = text,
            fontSize = 15.sp,
        )
        Spacer(modifier = Modifier.weight(1f))
        Text(
            color = Color.Black,
            text = ">",
            fontSize = 15.sp,
        )
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:23:27