Arc*_*nes 31 android android-jetpack-compose
您究竟如何才能在 中添加 Margin Jetpack Compose?
我可以看到有一个Modifier用于填充,Modifier.padding(...)但我似乎无法找到一个用于边距的,或者我是瞎子吗?
请有人指导我。
非常感谢。
ank*_*ag2 50
您还可以使用Spacer:
Spacer(modifier = Modifier.width(10.dp))
Run Code Online (Sandbox Code Playgroud)
它表示一个空白空间布局,其大小可以使用Modifier.width,Modifier.height和Modifier.size修饰符来定义。
假设您想在 2 个可组合项之间添加边距,那么您可以通过以下方式实现
Text(
text = stringResource(id = R.string.share_your_posters),
fontSize = 16.sp,
color = Color.Black
)
Spacer(modifier = Modifier.width(10.dp))
Image(painter = painterResource(id = R.drawable.ic_starts), contentDescription = null)
Run Code Online (Sandbox Code Playgroud)
ngl*_*ber 36
您可以将填充和边距视为同一件事(将其想象为“间距”)。可以在同一个可组合中应用两次(或更多)填充,并实现与使用边距+填充获得的类似行为。例如:
val shape = CircleShape
Text(
text = "Text 1",
style = TextStyle(
color = Color.White,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center),
modifier = Modifier.fillMaxWidth()
.padding(16.dp)
.drawBorder(2.dp, MaterialTheme.colors.secondary, shape)
.drawBackground(MaterialTheme.colors.primary, shape)
.padding(16.dp)
)
Run Code Online (Sandbox Code Playgroud)
将导致:
如您所见,第一个padding是在组件与其边框之间添加一个空格。然后定义背景和边框。最后,padding设置一个 new以在边框和文本之间添加空间。
ana*_*bek 32
在 Compose 中,修饰符的顺序很重要。
如果您在其他所有内容padding 之前使用,它的行为就像padding。
如果您在其他所有内容padding 之后使用,它的行为就像margin。
هيث*_*يثم 18
margin 与 padding 不同,margin 是 widget 外部的空间,padding 是 widget 内部的距离,在旧的 XML 中你可以明确决定使用哪一个,但是新的 compose 方式是不同的。
如何处理填充和边距?
有一个对象可以设置为可组合项的参数,称为Modifier,您可以使用它来执行边距和填充。
填充示例:
Text(
text = "Test",
modifier = Modifier
.padding(16.dp)
.clickable { }
)
Run Code Online (Sandbox Code Playgroud)
保证金示例
Text(
text = "Test",
modifier = Modifier
.clickable { }
.padding(16.dp)
)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,顺序在组合中有所不同,所有修饰符都是按顺序实现的。
Val*_*kov 16
考虑填充和边距,您指的是我们习惯的所谓的盒模型。Compose 中没有盒子模型,而是一系列应用于给定组合的修饰符。诀窍是您可以多次应用相同的修饰符,例如填充或边框,并且这些修饰符的顺序很重要,例如:
@Composable
fun PaddingExample() {
Text(
text = "Hello World!",
color = Color.White,
modifier = Modifier
.padding(8.dp) // margin
.border(2.dp, Color.White) // outer border
.padding(8.dp) // space between the borders
.border(2.dp, Color.Green) // inner border
.padding(8.dp) // padding
)
}
Run Code Online (Sandbox Code Playgroud)
结果你会得到这个可组合的:
这种设计在Modifiers 文档中有很好的解释:
注意:显式顺序可帮助您推断不同修饰符将如何相互作用。将此与基于视图的系统进行比较,在该系统中您必须学习框模型,边距应用于元素“外部”但填充“内部”,并且背景元素将相应地调整大小。修改器设计使这种行为明确且可预测,并为您提供更多控制以实现您想要的确切行为。
因此,根据我在阅读文档后的理解,没有边距修饰符,例如 API 设计者认为给出本质上做同样事情的不同名称是多余的。
假设您希望在用黄色背景为容器着色之前应用 8dp 的边距,并且希望容器的内容填充为 4dp。
Column(modifier = Modifier.padding(all = 8.dp)
.background(color = Color.Yellow)
.padding(all=4.dp)) {
Text(text = "Android")
...
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,您可以看到我首先应用了填充,然后向容器添加了背景颜色,最后添加了最后的填充。它看起来是这样的。正如我们所想的那样。

| 归档时间: |
|
| 查看次数: |
12209 次 |
| 最近记录: |