android compose 设置 padding 和 margin

第一种方法, 直接看代码!!

Kotlin 复制代码
@Preview(name = "Test Margin")
@Composable
fun TestMargin() {
    Box(modifier = Modifier.fillMaxWidth()) {
        Text(
            modifier = Modifier
                // 设置 margin
                .padding(start = 10.dp)
                .width(100.dp)
                .height(100.dp)
                .background(color = Color.Red)
                // 设置 padding
                .padding(start = 50.dp),
            text = "Hello World!"
        )
    }
}

再看看 ChatGPT 的回答

在 Jetpack Compose 中,ConstraintLayout 是一个非常灵活的布局工具。要在 ConstraintLayout 中设置 paddingmargin,需要分别使用 padding 修饰符和 Modifier.constrainAs 中的 margin 参数。

设置 padding

padding 是为整个 ConstraintLayout 或其子元素添加内边距。

Kotlin 复制代码
ConstraintLayout(
    modifier = Modifier.padding(16.dp) // 为整个 ConstraintLayout 设置 padding
) {
    val (box) = createRefs()

    Box(
        modifier = Modifier
            .size(100.dp)
            .background(Color.Red)
            .padding(8.dp) // 为 Box 设置 padding
            .constrainAs(box) {
                top.linkTo(parent.top)
                start.linkTo(parent.start)
            }
    )
}

设置 margin

margin 是为子元素在 ConstraintLayout 中设置外边距。

Kotlin 复制代码
ConstraintLayout {
    val (box) = createRefs()

    Box(
        modifier = Modifier
            .size(100.dp)
            .background(Color.Red)
            .constrainAs(box) {
                top.linkTo(parent.top, margin = 16.dp) // 设置 marginTop
                start.linkTo(parent.start, margin = 16.dp) // 设置 marginStart
            }
    )
}

综合使用

你可以同时设置 paddingmargin 来控制布局内外的间距。

Kotlin 复制代码
ConstraintLayout(
    modifier = Modifier.padding(16.dp) // 整个布局的 padding
) {
    val (box1, box2) = createRefs()

    Box(
        modifier = Modifier
            .size(100.dp)
            .background(Color.Blue)
            .constrainAs(box1) {
                top.linkTo(parent.top, margin = 8.dp) // 外边距
                start.linkTo(parent.start, margin = 8.dp)
            }
            .padding(4.dp) // 内边距
    )

    Box(
        modifier = Modifier
            .size(100.dp)
            .background(Color.Green)
            .constrainAs(box2) {
                top.linkTo(box1.bottom, margin = 16.dp)
                start.linkTo(box1.end, margin = 16.dp)
            }
            .padding(4.dp)
    )
}

在这个例子中,ConstraintLayout 本身有一个 16dp 的 padding,而每个 Box 有它们自己的 paddingmargin

相关推荐
牧艺几秒前
Cursor Rules / Skills 分层设计:让 Agent 像「团队新同事」
前端·人工智能·cursor
光影少年21 分钟前
react navite 跨端核心原理
前端·react native·react.js
用户8524950718424 分钟前
解密 JavaScript 中的 this:谁才是真正的调用者?
javascript·面试
monologues24 分钟前
Vue 3 渲染器的核心秘密:从 VNode 创建到快速 Diff 算法
前端
奇奇怪怪的24 分钟前
从开发到生产——生成优化、监控、安全与成本
前端
10share25 分钟前
100行代码 模拟实现Vue 响应式系统
前端·vue.js
Heo26 分钟前
Vite进阶用法详解
前端·javascript·面试
雨白36 分钟前
指针与数组的核心机制
android
狂炫冰美式1 小时前
人均配了AI, 为什么公司还是没变快? 🤔 本质还是分布式系统问题
前端·后端·架构
铁皮饭盒2 小时前
Next.js 风格路由内置?Bun FileSystemRouter 凭啥这么香
javascript