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

Jetpack Compose中如何让Row包裹动态尺寸内容?

解决Jetpack Compose中Row高度无法适配按钮的问题

你的问题核心是Button默认的最小触摸区域限制,以及Row的排列设置导致高度冗余,按以下步骤修改即可解决:

步骤1:关闭Button的默认最小触摸区域

Jetpack Compose的Button自带强制触摸区域至少48dp的规则,哪怕你用defaultMinSize缩小了布局尺寸,这个触摸区域的大小仍会让Row的高度被撑大。给每个Button添加minimumTouchTargetSize(enabled = false)修饰符,彻底关闭这个限制:

Button(
    modifier = Modifier
        .defaultMinSize(minWidth = 1.dp, minHeight = 1.dp)
        .minimumTouchTargetSize(enabled = false), // 新增该行关闭触摸区域限制
    onClick = { /*TODO*/ },
    contentPadding = PaddingValues(0.dp)
) {
    Text(text = "HELLO")
}

步骤2:调整Row的垂直对齐设置(可选)

如果保留verticalAlignment = Alignment.CenterVertically,在Button尺寸较小时仍可能出现Row高度冗余,可直接移除该参数,让Row默认按顶部对齐,高度完全由子Button的内容决定:

Row(
    horizontalArrangement = Arrangement.SpaceEvenly,
    // 移除verticalAlignment参数
    modifier = Modifier
        .wrapContentSize()
        .background(LightGrey)
) {
    // 两个Button代码同上
}

修改后的完整代码

Row(
    horizontalArrangement = Arrangement.SpaceEvenly,
    modifier = Modifier
        .wrapContentSize()
        .background(LightGrey)
) {
    Button(
        modifier = Modifier
            .defaultMinSize(minWidth = 1.dp, minHeight = 1.dp)
            .minimumTouchTargetSize(enabled = false),
        onClick = { /*TODO*/ },
        contentPadding = PaddingValues(0.dp)
    ) {
        Text(text = "HELLO")
    }
    Button(
        modifier = Modifier
            .defaultMinSize(minWidth = 1.dp, minHeight = 1.dp)
            .minimumTouchTargetSize(enabled = false),
        onClick = { /*TODO*/ },
        contentPadding = PaddingValues(0.dp)
    ) {
        Text(text = "HELLO")
    }
}

修改后Row的高度会完全适配Button的内容高度,不会再出现冗余的背景区域。

内容的提问来源于stack exchange,提问作者D-I-S-C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:08:08