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

Jetpack Compose中设置fillMaxWidth()的Row为何超出Card布局范围

问题根因

Row布局中,包裹文本内容的Column设置了fillMaxWidth()修饰符,该修饰符会强制元素占满父容器Row的全部可用宽度,导致后续排列的Spacer和Switch组件没有剩余布局空间,直接被挤出Card的可视边界,出现越界显示的异常。

修复方案

将Column上的fillMaxWidth()替换为weight(1f)修饰符即可。
weight修饰符的测量逻辑是:父布局会先测量所有未设置weight的子元素尺寸,计算剩余可用空间后,再将剩余空间全部分配给设置了weight的子元素,不会出现子元素被挤出边界的问题。

修复后的完整实现代码:

@ExperimentalMaterial3Api
@Composable
fun Settings() {
    Card(modifier = Modifier
        .fillMaxWidth()
    ) {
        SettingItem(itemTitle = "Test Title", itemDescription = "Description")
    }
}

@ExperimentalMaterial3Api
@Composable
fun SettingItem(itemTitle: String, itemDescription: String) {
    Row(modifier = Modifier.padding(12.dp).fillMaxWidth()) {
        Column(modifier = Modifier.weight(1f)) {
            Text(text = itemTitle, color = MaterialTheme.colorScheme.primary)
            Text(text = itemDescription, color = MaterialTheme.colorScheme.secondary)
        }
        Spacer(modifier = Modifier.width(12.dp))
        Switch(checked = false, onCheckedChange = {})
    }
}

额外优化提示:在横向排列的Row中设置元素横向间距时,直接给Spacer指定width即可,原写法中size里的height参数不会生效,Row内子元素默认会按内容自适应高度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:09:32