DEV Community

myougaTheAxo
myougaTheAxo

Posted on

ConstraintLayout in Jetpack Compose: Advanced Layouts

ConstraintLayout in Compose provides powerful positioning capabilities for complex UI layouts, perfect for responsive design.

Basic Constraint Setup

@Composable
fun ComplexLayout() {
    ConstraintLayout(
        modifier = Modifier.fillMaxSize()
    ) {
        val (topBox, centerBox, bottomBox) = createRefs()

        Box(
            modifier = Modifier
                .size(100.dp)
                .background(Color.Red)
                .constrainAs(topBox) {
                    top.linkTo(parent.top, margin = 16.dp)
                    start.linkTo(parent.start, margin = 16.dp)
                }
        )
    }
}
Enter fullscreen mode Exit fullscreen mode

Chains for Equal Distribution

Use chains to distribute elements evenly:

@Composable
fun ChainLayout() {
    ConstraintLayout(modifier = Modifier.fillMaxWidth()) {
        val (btn1, btn2, btn3) = createRefs()

        createHorizontalChain(btn1, btn2, btn3, chainStyle = ChainStyle.Spread)

        Button(
            onClick = {},
            modifier = Modifier.constrainAs(btn1) {
                top.linkTo(parent.top)
            }
        ) { Text("1") }

        Button(
            onClick = {},
            modifier = Modifier.constrainAs(btn2) {
                top.linkTo(parent.top)
            }
        ) { Text("2") }

        Button(
            onClick = {},
            modifier = Modifier.constrainAs(btn3) {
                top.linkTo(parent.top)
            }
        ) { Text("3") }
    }
}
Enter fullscreen mode Exit fullscreen mode

Barriers and Guidelines

Create barriers and guidelines for alignment:

@Composable
fun BarrierLayout() {
    ConstraintLayout {
        val (img, title, desc) = createRefs()
        val guideline = createGuidelineFromStart(0.3f)

        Image(
            painter = painterResource(R.drawable.ic_image),
            contentDescription = null,
            modifier = Modifier.constrainAs(img) {
                start.linkTo(parent.start)
                top.linkTo(parent.top)
            }
        )

        Text(
            text = "Title",
            modifier = Modifier.constrainAs(title) {
                start.linkTo(guideline)
                top.linkTo(parent.top)
            }
        )
    }
}
Enter fullscreen mode Exit fullscreen mode

ConstraintLayout brings desktop-like layout power to Android development.


8 Android app templates available on Gumroad

Top comments (0)