Android Jetpack Compose 中 LinearLayout 的替代方案是什么?

Val*_*kov 2 android android-layout android-jetpack android-jetpack-compose

在 Android Jetpack Compose 中,我可以使用什么来代替LinearLayout?有一个示例说明常见的 LinearLayout 功能可能会被新 API 取代,这很好。

Val*_*kov 8

LinearLayout 对应于 Compose 中的RowColumn可组合。

如果您要显示大量项目,请查看LazyRowLazyColumn,它们只显示像RecyclerView那样的可见项目,但您可以像使用 Row 和 Column 一样简单地使用它们。请参阅与 RecyclerView 或 ListView 等效的 Jetpack Compose 是什么?举个例子。

让我们将 LinearLayout API 与 Row 和 Column 进行比较:


android:orientation (LinearLayout)
正如你可能猜到的<LinearLayout android:orientation="vertical" ...>,等价于Column {}and<LinearLayout android:orientation="horizontal" ...>toRow {}


安卓:重力(LinearLayout中)
有是horizontalAlignmentverticalArrangement论点verticalAlignmenthorizontalArrangement。例如:

<LinearLayout ...
    android:orientation="vertical"
    android:gravity="end|center">
  ...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

相当于

Column(
    ...
    horizontalAlignment = Alignment.End,
    verticalArrangement = Arrangement.Center
) { ... }
Run Code Online (Sandbox Code Playgroud)

android:layout_gravity (LinearLayout.LayoutParams)
请参阅 Row 的align和 Column 的align修饰符,如果设置,它们会覆盖容器对齐。还有更高级的修饰符,如 Row 的alignByBaseline,请参阅文档以获取更多详细信息。例如:

<LinearLayout ...
    android:orientation="vertical"
    android:gravity="end">

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="first" />

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        android:text="second" /> 

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

等于

Column(
    ...
    horizontalAlignment = Alignment.End,
) {
    // this item is aligned to the end according to the column's alignment
    Text("first")
    // but this one is aligned to the start because it overrides the alignment
    Text("second", modifier = Modifier.align(Alignment.Start))
}
Run Code Online (Sandbox Code Playgroud)

android:layout_weight (LinearLayout.LayoutParams)
查看行的权重和列的权重修饰符。例如

<LinearLayout android:orientation="horizontal" ...>
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text="first" />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:text="second" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

等于

Row {
    Text("first", modifier = Modifier.weight(1.0f))
    Text("second", modifier = Modifier.weight(2.0f))
}
Run Code Online (Sandbox Code Playgroud)