Jetpack Compose 教學上課講義【從零開始學 Jetpack Compose 程式設計】ConstraintLayout 約束佈局方式
 
【從零開始學 Jetpack Compose 程式設計】
線上教學課程目錄: https://bit.ly/3JF4SFA
Youtube 課程播放清單:https://bit.ly/3tFjRbx
Udemy 線上課程:https://bit.ly/3MbVnhO
Layout basics
https://developer.android.com/jetpack/compose/layouts/basics#scrollable
constraintlayout
https://developer.android.com/jetpack/compose/layouts/constraintlayout
ConstraintLayoutBaseScope
https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintLayoutBaseScope#createabsoluteleftbarrier
Gradle
要額外宣告
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0"
ConstraintLayout

ConstraintLayout(
        modifier = Modifier
            .fillMaxHeight()
            .fillMaxWidth()
    ) {
        val (yellowBox, greenBox, redBox) = createRefs()
        //對齊父容器
        Box(modifier = Modifier
            .size(50.dp)
            .background(Color.Yellow)
            .constrainAs(redBox) {
                top.linkTo(parent.top)
                bottom.linkTo(parent.bottom)
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            }
        )
        //對齊父容器,加入 margin 間距
        Box(modifier = Modifier
            .size(50.dp)
            .background(Color.Green)
            .constrainAs(greenBox) {
                top.linkTo(parent.top,150.dp)
                bottom.linkTo(parent.bottom)
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            })
         //對齊其他元件,並加入 margin 間距
        Box(modifier = Modifier
            .size(50.dp)
            .background(Color.Red)
            .constrainAs(yellowBox) {
                top.linkTo(greenBox.bottom)
                start.linkTo(greenBox.end, 20.dp)
            })
    }
作業

Guideline

ConstraintLayout(
    modifier = Modifier
        .fillMaxHeight()
        .fillMaxWidth()
) {
    val (yellowBox) = createRefs()
    val topGuideline = createGuidelineFromTop(0.1f)
    Box(modifier = Modifier
        .size(50.dp)
        .background(Color.Yellow)
        .constrainAs(yellowBox) {
            top.linkTo(topGuideline)
            start.linkTo(parent.start)
            end.linkTo(parent.end)
        })
}
Chains

ConstraintLayout(
        modifier = Modifier
            .fillMaxHeight()
            .fillMaxWidth()
    ) {
        val (yellowBox, greenBox, redBox) = createRefs()
        Box(modifier = Modifier
            .size(50.dp)
            .background(Color.Yellow)
            .constrainAs(redBox) {})
        Box(modifier = Modifier
            .size(50.dp)
            .background(Color.Green)
            .constrainAs(greenBox) {})
        Box(modifier = Modifier
            .size(50.dp)
            .background(Color.Red)
            .constrainAs(yellowBox) {})
        //水平
        createHorizontalChain(redBox, greenBox, yellowBox, chainStyle = ChainStyle.Spread)
//        createHorizontalChain(redBox, greenBox, yellowBox, chainStyle = ChainStyle.SpreadInside)
//        createHorizontalChain(redBox, greenBox, yellowBox, chainStyle = ChainStyle.Packed)
        //垂直
//        createVerticalChain(redBox, greenBox, yellowBox,chainStyle = ChainStyle.Spread) 
//        createVerticalChain(redBox, greenBox, yellowBox, chainStyle = ChainStyle.SpreadInside)
//        createVerticalChain(redBox, greenBox, yellowBox, chainStyle = ChainStyle.Packed)