Jetpack Compose - Box

2,911 阅读1分钟

1.介绍

可与内容组合的布局。根据传入的约束条件(Modifier,Alignment,propagateMinConstraints),该框将自行调整大小以适合内容。当子对象小于父对象时,默认情况下,它们将根据contentAlignment放置在框内。要单独指定子布局的对齐方式,请使用BoxScope.align修改器。默认情况下,将在不使用框的传入最小约束的情况下测量内容,除非“propagateMinConstraints”为true。例如,如果长方体包含无法直接指定修改器的内容,并且需要在长方体的内容上设置最小大小,则将propagateMinConstraints设置为true非常有用。如果将propagateMinConstraints设置为true,则框上设置的最小大小也将应用于内容,否则,最小大小将仅应用于框。当内容有多个子布局时,子布局将按组合顺序一个叠在另一个上,其实就类似于Android 的FrameLayout.

2.属性一览

inline fun Box(
    modifier: Modifier = Modifier,
    contentAlignment: Alignment = Alignment.TopStart,
    propagateMinConstraints: Boolean = false,
    content: BoxScope.() -> Unit
)@Composable Unit

参数

参数含义
modifier: Modifier = Modifier[布局修饰符](Jetpack Compose - Modifier(基础) (juejin.cn))
contentAlignment: Alignment = Alignment.TopStart      Box中内容的对齐方式,类似于android:layout_gravity
propagateMinConstraints: Boolean是否传播最小约束
content: BoxScope.() -> UnitBox中的内容

Box中Modifier拓展函数

  • fun Modifier.align(alignment: Alignment): Modifier Box参数contentAlignment: Alignment = Alignment.TopStart也可以在Modifier中设置,大多数控件都有这个拓展函数

  • fun Modifier.matchParentSize(): Modifier 填充满父布局的大小,同 android:layout_width="match_parent" 和 android:layout_height="match_parent"

使用实例

image.png propagateMinConstraints 为true最小大小将限制子布局 image.png

带有约束条件的Box,BoxWithConstraints

使用实例

maxHeight是实际的屏幕高度,再preview中永远是0 image.png

image.png

总结

Box运用场景其实是和Android中FrameLayout相似的,BoxWithConstraints可以用来做一些布局变化适配不同的场景。