Lukáš Kúšik
07/31/2023, 6:29 AM@Composable
fun Screen() {
Column() {
reversed(true) {
Text("1")
Text("2")
Text("3")
}
}
}
3, 2, 1 list would be rendered.Matthew
07/31/2023, 6:54 AMLazyColumn(reverseLayout = true) {
item { Text("1") }
item { Text("2") }
item { Text("3") }
}
Joel Denke
07/31/2023, 11:15 AMCompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl )
You can apply that into any layout in compose. Its not certain its implemented however. Using reverse layout on foundation components basically same public.Lukáš Kúšik
07/31/2023, 11:19 AMList<@Composable () -> Unit>
with the reversed()
function and then .forEach { it() }
would work.Joel Denke
07/31/2023, 11:21 AMLukáš Kúšik
07/31/2023, 11:25 AMColumn
. This means I could just use the LazyColumn
with reverseLayout
, but I wondered whether the same could be done with just a Column
or any other layout where the children order matters.Joel Denke
07/31/2023, 11:44 AMJoel Denke
07/31/2023, 11:46 AMLukáš Kúšik
07/31/2023, 11:50 AMColumn
?Matthew
08/01/2023, 1:39 AMColumn {
listOf<@Composable () -> Unit>(
{ Text("1") },
{ Text("2") },
{ Text("3") },
).asReversed().forEach { it() }
}
Albert Chang
08/01/2023, 2:06 AMval ReversedArrangement: Arrangement.Vertical = object : Arrangement.Vertical {
override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) {
var current = 0
for (i in sizes.indices.reversed()) {
outPositions[i] = current
current += sizes[i]
}
}
}
And use it like Column(verticalArrangement = ReversedArrangement) { ... }
.Joel Denke
08/01/2023, 11:07 AMLukáš Kúšik
08/01/2023, 4:46 PMJoel Denke
08/01/2023, 4:58 PMLukáš Kúšik
08/01/2023, 6:18 PMfun Arrangement.Vertical.reversed(enabled: Boolean): Arrangement.Vertical {
return object : Arrangement.Vertical {
override fun Density.arrange(totalSize: Int, sizes: IntArray, outPositions: IntArray) {
with(this@reversed) {
this@arrange.arrange(totalSize, sizes, outPositions)
}
if (enabled) outPositions.reverse()
}
}
}
Usage:
Column(
verticalArrangement = Arrangement.Bottom.reversed(isReversed)
)
Edit: Okay, maybe it's not working 😄 I wanted to honor the original Top vs. Bottom arrangement too and only change the order of the children