从 padding 和 margin 的Angular 来考虑,你指的是我们所习惯的所谓的盒子模型。在Compose中没有盒子模型,而是一系列修饰符,这些修饰符应用于给定的可组合对象。诀窍在于你可以多次应用相同的修饰符,如padding或border,例如order of these matters:
@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
)
}
8条答案
按热度按时间envsm3lx1#
可以将填充和边距视为同一事物(将其想象为“间距”)。填充可以在同一可组合对象中应用两次(或更多次),并实现与边距+填充类似的行为。例如:
将导致:
如您所见,第一个
padding
在组件和其边框之间添加了一个空格,然后定义了背景和边框,最后设置了一个新的padding
在边框和文本之间添加空格。anauzrmj2#
从 padding 和 margin 的Angular 来考虑,你指的是我们所习惯的所谓的盒子模型。在Compose中没有盒子模型,而是一系列修饰符,这些修饰符应用于给定的可组合对象。诀窍在于你可以多次应用相同的修饰符,如padding或border,例如order of these matters:
结果你会得到这个可组合的:
修改器文档中详细解释了此设计:
注意:显式的顺序有助于你理解不同的修饰符是如何交互的。与基于视图的系统相比,在基于视图的系统中,你必须学习框模型,即边距应用于元素的“外部”,但填充“内部”,背景元素将相应地调整大小。修饰符设计使这种行为显式和可预测,并给你更多的控制来实现你想要的确切行为。
r9f1avp53#
您还可以使用间隔符:
它表示空白布局,其大小可以使用
Modifier.width
、Modifier.height
和Modifier.size
修饰符定义。假设您想在两个可合成对象之间添加边距,则可以通过以下方式实现
jmo0nnb34#
边距与填充不同,边距是小部件外部的空间,而填充是小部件内部的距离,在旧的XML中,您可以显式地决定使用哪一个,但是新的组合方式不同。
怎样排版处理填充物和页边距?
有一个对象可以设置为组合对象的参数,叫做Modifier,你可以用它来做边距和填充。
填充示例:
保证金示例
正如您所看到的,顺序在组合中起着重要作用,所有修饰符都是按顺序实现的。
yyyllmsg5#
因此,从我阅读文档后所能理解的,没有API设计师认为的那样的利润修饰符,给本质上做同样事情的东西起不同的名字是多余的。
假设您希望在将容器着色为黄色背景之前应用8dp的边距,并且希望容器的内容填充为4dp。
在上面的例子中,你可以看到我首先应用了填充,然后我给容器添加了背景色,最后是最后一个填充。这是它的外观。就像我们预期的那样。
lb3vh1jj6#
我也在寻找一些东西,它应该给我一个直接的选项来设置像TextView这样的视图的边距。但不幸的是,我们在Jetpack组合中没有边距支持。但好消息是,我们仍然可以通过使用像Box这样的布局容器来实现它,它允许我们添加像TextView这样的视图。ImageView等,所以你可以添加边距的任何子(TextView)通过使用填充修饰符的父(框).下面是代码:
结果是:
在这里我给了10.dp填充框。希望它是有用的。
x6492ojm7#
你可以通过把你的内容放在一个不同的可组合对象如
Box
中,并使外部可组合对象clickable
成为可组合对象,来达到与margin相同的效果。使用这种方法,内部填充区域将被包括在可点击内容中。cnjp1d6j8#
您可以通过使用带有填充a的嵌套 * a * 表面**元素来实现边距效果,例如