我想将特定组合的方向设置为RTL
@Composable
fun ViewToBeChanged() {
Row {
Image()
Column {
Text("Title")
Text("Subtitle")
}
}
}
有可能吗?
Jetpack composeLayout documentation提到LocalLayoutDirection
通过更改LocalLayoutDirection
compositionLocal来更改可组合项的布局方向。
但是我不知道如何在一个组合物中使用它才能起作用。
5条答案
按热度按时间bq3bfh9z1#
您可以使用
CompositionLocalProvider
提供自定义**LocalLayoutDirection
**。比如:
bis0qfac2#
因为我没有你的形象,我调整你的组合:
这给我们:
切换到RTL的一种方法是使用
CompositionLocalProvider
和LocalLayoutDirection
:在这里,我们说我们正在覆盖
CompositionLocalProvider()
的尾部lambda的内容的布局方向的CompositionLocal
。这给了我们:这会改变可组合树的这个分支所使用的布局方向,因为可组合本身。英语仍然是一种LTR语言,所以文本不受影响。
xwbd5t1u3#
作为对其他答案的概括,如果在不同的Composable中需要,我们可以定义以下内容
然后简单地使用
或
wnvonmuf4#
具体来说,对于
Row
,您可以使用horizontalArrangement
参数来影响RTL / LTR行为。默认值为Arrangement.Start
,它会考虑布局方向。使用Arrangement.Absolute
中的一个,您可以给予忽略布局方向的排列。在您的示例中:
clj7thdc5#
使用CompositionLocalProvider更改方向有可能导致所有子布局更改方向,这可能不是我们所期望的。使用LazyColumn或LazyRow可以反转布局,但子布局的功能将受到限制,并且存在一些奇怪的限制,因此这里是我的解决方案
使用ReversibleRow替换Row。