Создание цепочек компонентов

Последнее обновление: 07.04.2024

Цепочки или chains позволяют применить набор ограничений к группе компонентов и таким образом построить из них цепочку. Для этого применяются методы createHorizontalChain() или createVerticalChain(), в которые передаются ссылки на компоненты. Например, следующий код создает горизонтальную цепочку между тремя компонентами Box:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent{
            ConstraintLayout(Modifier.fillMaxSize()) {
                val (box1, box2, box3) = createRefs()
                createHorizontalChain(box1, box2, box3)
                Box(Modifier.size(120.dp).background(Color.DarkGray).constrainAs(box1) {
                    centerVerticallyTo(parent)
                })
                Box(Modifier.size(120.dp).background(Color.Red).constrainAs(box2) {
                    centerVerticallyTo(parent)
                })
                Box(Modifier.size(120.dp).background(Color.Blue).constrainAs(box3) {
                    centerVerticallyTo(parent)
                })
            }
        }
    }
}
ConstraintLayout и chain в Jetpack Compose на Kotlin на Android

Цепочка компонентов может быть упорядочена в соответствии с одним из стилей, которые представляют класс ChainStyle:

  • ChainStyle.Spread: пространство распределяется равномерно по всем компонентам, включая свободное пространство до первого компонента и после последнего компонента.

  • ChainStyle.SpreadInside: пространство распределяется равномерно по всем компонентам, без какого-либо свободного места перед первым компонентом или после последнего компонента.

  • ChainStyle.Packed: пространство распределяется до первого и после последнего компонента, компоненты упаковываются вместе без промежутков между собой.

Например, применим последний второй стиль:

import androidx.constraintlayout.compose.ChainStyle
............................................
ConstraintLayout(Modifier.fillMaxSize()) {
    val (box1, box2, box3) = createRefs()
    createHorizontalChain(box1, box2, box3, chainStyle = ChainStyle.SpreadInside)
    Box(Modifier.size(120.dp).background(Color.DarkGray).constrainAs(box1) {
        centerVerticallyTo(parent)
    })
    Box(Modifier.size(120.dp).background(Color.Red).constrainAs(box2) {
        centerVerticallyTo(parent)
    })
    Box(Modifier.size(120.dp).background(Color.Blue).constrainAs(box3) {
        centerVerticallyTo(parent)
    })
}
ConstraintLayout и ChainStyle в Jetpack Compose на Kotlin на Android
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850