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

相关推荐
想吃火锅10057 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
原则猫9 小时前
HOOKS 背后机制
前端
码语智行9 小时前
首页导航跳转功能深度解析-系统内和系统外
前端
阿猫的故乡9 小时前
Vue过渡动画从入门到装X:淡入淡出、滑动、列表动画、第三方库全搞定
前端·javascript·vue.js
IManiy10 小时前
总结之Vibe Coding前端骨架
前端
小和尚敲木头10 小时前
vue3 vite动态拼接图片路径
javascript
JS菌10 小时前
AI Agent 沙箱双层防护体系:从权限过滤到内核隔离的完整实现
前端·人工智能·后端
Aphasia31110 小时前
从输入URL到页面展示全流程
前端·面试
黄林晴10 小时前
Google Play 发版链路全面重构:合规前置、审核自动化、生态全面收紧
android·google
我叫黑大帅10 小时前
前端如何竖屏固定视口背景
前端·javascript·面试