I've faced with this some days ago and I solved it using ConstraintLayout
.
What I had to do is :
- Add
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-beta02"
to build.gradle
- Wrap every
Box
in a ConstraintLayout { .. }
- Inside each
Box
add a Modifier.constrainAs
to align the Top
Bottom
Start
End
as you want.
- If you want the first box be the same
width
as the second one without hardcoding the dps
you should use width = Dimension.fillToConstraints
fillToConstraints - the layout will expand to fill the space defined by its constraints in that dimension.
Basic example without hard-coding :
ConstraintLayout() {
val (title, description) = createRefs()
Box(
modifier = Modifier
.padding(start = 28.dp)
.background(color = Red)
.padding(
horizontal = 16.dp,
)
.constrainAs(title) {
top.linkTo(parent.top)
start.linkTo(parent.start)
end.linkTo(parent.end)
width = Dimension.fillToConstraints
}
) {
Text(text = "Hello World")
}
Box(
modifier = Modifier
.padding(end = 4.dp)
.background(Color.Magenta)
.padding(bottom = 5.dp, start = 8.dp, end = 16.dp, top = 4.dp)
.constrainAs(description) {
top.linkTo(title.top, margin = 16.dp)
start.linkTo(parent.start)
end.linkTo(parent.end)
bottom.linkTo(parent.bottom)
}
) {
Text(text = "Skizo-ozᴉʞS rules")
}
}
Now you have to play with the padding
according to your UI and adapt it, result is something like this :
