Jetpack Compose - Column、Row

1,931 阅读2分钟

1.介绍

Compose中把ListView分成了Column垂直列表,Row横向列表。

Column

垂直布局,以垂直顺序放置其子级的布局组合。默认情况下,子布局不会滚动;请参见Modifier.verticalScroll以添加此行为。有关仅构成和布局当前可见项的垂直滚动列表,请参见LazyColumn。列布局能够根据使用ColumnScope.weight修改器提供的权重来指定子级高度。如果未向child提供weight,则在根据剩余可用空间按weight比例计算分配给child,如果fill = false ,将根据child提供其首选高度来分配高度。(使用实例中会详细介绍分配规则)

Row

水平布局,以水平顺序放置其子级的布局组合。默认情况下,子布局不会滚动;请参见Modifier.horizontalScroll以添加此行为。有关仅构成和布局当前可见项的水平滚动列表,请参见LazyRow。行布局能够根据使用RowScope.weight修改器提供的权重来指定子级宽度。如果未向child提供weight,则在根据剩余可用空间按weight比例计算分配给child,如果fill = false ,将根据child提供其首选宽度来分配宽度。

2.属性一览

@Composable
inline fun Column(
    modifier: Modifier = Modifier,
    verticalArrangement: Arrangement.Vertical = Arrangement.Top,
    horizontalAlignment: Alignment.Horizontal = Alignment.Start,
    content: ColumnScope.() -> Unit
)@Composable Unit
@Composable
inline fun Row(
    modifier: Modifier = Modifier,
    horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
    verticalAlignment: Alignment.Vertical = Alignment.Top,
    content: RowScope.() -> Unit
)@Composable Unit

参数

参数含义
modifier: Modifier = Modifier[布局修饰符](Jetpack Compose - Modifier(基础) (juejin.cn))
verticalArrangement: Arrangement.Vertical = Arrangement.Top子布局级的垂直放置方式,默认从Top到Bottom
horizontalAlignment: Alignment.Horizontal = Alignment.Start子布局级的垂直放置方式,默认从start开始
content: BoxScope.() -> Unit子布局内容

Box中Modifier拓展函数

  • fun Modifier.weight( /@FloatRange(from = 0.0, fromInclusive = false)/ weight: Float, fill: Boolean = true ): Modifier Column 和 Row的权重分配函数,weight: Float 为比例,fill: Boolean = true 是否填充满下文使用实例会具体介绍
  • fun Modifier.align(alignment: Alignment.Vertical): Modifier 类似于设置layout_gravity,大多数空间都有的函数,不做过多介绍
  • fun Modifier.alignByBaseline(): Modifier 基于baseline对其
  • fun Modifier.alignBy(alignmentLineBlock: (Measured) -> Int): Modifier
  • fun Modifier.alignBy(alignmentLine: HorizontalAlignmentLine): Modifier

使用实例

Column使用

image.png

Row使用

image.png

Modifier.align(alignment: Alignment.Vertical) 和 Modifier.alignByBaseline()

image.png