Jetpack compose:更改可组合的布局方向

时间:2021-03-27 19:15:22

标签: android android-jetpack-compose

我想将特定可组合的方向设置为 RTL


@Composable
fun ViewToBeChanged() {
  Row {
     Image()
     Column {
        Text("Title")
        Text("Subtitle")
    }
  }
}

有可能吗?

Jetpack 撰写 Layout documentation 提及 LocalLayoutDirection

<块引用>

通过更改 LocalLayoutDirection compositionLocal 来更改可组合的布局方向。

但是我不知道如何在可组合中使用它才能生效。

2 个答案:

答案 0 :(得分:4)

因为我没有你的图片,所以我调整了你的可组合:

@Composable
fun ViewToBeChanged() {
  Row {
    Text("Foo", modifier = Modifier.padding(end = 8.dp))

    Column {
      Text("Title")
      Text("Subtitle")
    }
  }
}

这给了我们:

ViewToBeChanged() rendering

切换到 RTL 的一种方法是使用 CompositionLocalProviderLocalLayoutDirection

@Composable
fun RtlView() {
  CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
    Row {
      Text("Foo", modifier = Modifier.padding(end = 8.dp))

      Column {
        Text("Title")
        Text("Subtitle")
      }
    }
  }
}

在这里,我们是说我们正在覆盖提供给 CompositionLocal 的尾随 lambda 内容的布局方向的 CompositionLocalProvider()。这给了我们:

RtlView() rendering

这改变了可组合树的这个分支使用的布局方向,用于组合本身。英语仍然是LTR语言,所以文字不受影响。

答案 1 :(得分:3)

您可以使用 CompositionLocalProvider 提供自定义 LocalLayoutDirection

类似于:

CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl ) {
    Column(Modifier.fillMaxWidth()) {
        Text("Title")
        Text("Subtitle")
    }
}