栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Jetpack Compose——ConstraintLayout简单使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jetpack Compose——ConstraintLayout简单使用

首先导入依赖

implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-beta02"

看看参数:

ConstraintLayout(
    modifier: Modifier = Modifier,//布局修饰
    optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,//布局修饰
    crossinline content: @Composable ConstraintLayoutScope.() -> Unit//内容
)

ConstraintLayout(
    constraintSet: ConstraintSet,//子布局约束
    modifier: Modifier = Modifier,//布局修饰
    optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,//布局修饰
    animateChanges: Boolean = false,//动画的变化
    animationSpec: AnimationSpec = tween(),//动画配置
    noinline finishedAnimationListener: (() -> Unit)? = null,//动画结束回调
    noinline content: @Composable () -> Unit//内容
)
Guideline

引导线,从特定位置(某一方向上的偏移量或者某一方向上的比例)创建一条实际并不可见的参考线:

    ConstraintLayout(modifier = Modifier.fillMaxSize()) {
        val guideline = createGuidelineFromStart(0.2f)//布局20%位置创建
        val (box1, box2) = createRefs()
        Box(modifier = Modifier
            .fillMaxSize()
            .background(Color.Yellow)
            .constrainAs(box1) {
                end.linkTo(guideline)
            }) {

        }
        Box(modifier = Modifier
            .fillMaxSize()
            .background(Color.Red)
            .constrainAs(box2) {
                start.linkTo(guideline)
            }) {

        }

    }

效果如图:

 Barrier

屏障:两个长短不一样的排列以最长的为基准进行对齐

        ConstraintLayout(ConstraintSet {
            val box1 = createRefFor("box1")
            val box2 = createRefFor("box2")
            val box3 = createRefFor("box3")
            constrain(box1) {
                top.linkTo(parent.top)
                start.linkTo(parent.start)
            }

            constrain(box2) {
                top.linkTo(box1.bottom)
                start.linkTo(parent.start)
            }

            val barrier = createEndBarrier(box1, box2)

            constrain(box3) {
                start.linkTo(barrier)
                top.linkTo(box1.top)
                bottom.linkTo(box2.bottom)
            }
        }) {
            Box(
                modifier = Modifier
                    .layoutId("box1")
                    .background(color = Color.Red)
                    .width(100.dp)
                    .height(100.dp)
            )
            Box(
                modifier = Modifier
                    .layoutId("box2")
                    .background(color = Color.Yellow)
                    .width(150.dp)
                    .height(100.dp)
            )
            Box(
                modifier = Modifier
                    .layoutId("box3")
                    .background(color = Color.Blue)
                    .width(200.dp)
                    .height(100.dp)
            )
        }

效果如图:

Chain

链,将组件顺序打包成一行或一列,目前就两种

createHorizontalChain(
        vararg elements: ConstrainedLayoutReference,//打包控件编号
        chainStyle: ChainStyle = ChainStyle.Spread//链的类型
    )

createVerticalChain(
        vararg elements: ConstrainedLayoutReference,//打包控件编号
        chainStyle: ChainStyle = ChainStyle.Spread//链的类型
    ) 

链的类型目前有三种
Spread:所有控件平均分布在父布局空间中,是默认的类型
SpreadInside:第一个和最后一个分布在链条的两端,其余的控件平均分布剩下的空间
Packed:所有控件打包在一起,并放置在链条的中间

        ConstraintLayout(modifier = Modifier.fillMaxSize()) {
            val (box1, box2, box3,box4) = createRefs()
            //设置chainStyle类型为SpreadInside
            createHorizontalChain(box1, box2, box3,box4, chainStyle = ChainStyle.SpreadInside)
            Box(modifier = Modifier
                .size(100.dp)
                .background(Color.Red)
                .constrainAs(box1) {})
            Box(modifier = Modifier
                .size(100.dp)
                .background(Color.Yellow)
                .constrainAs(box2) {})
            Box(modifier = Modifier
                .size(100.dp)
                .background(Color.Blue)
                .constrainAs(box3) {})
            Box(modifier = Modifier
                .size(100.dp)
                .background(Color.Green)
                .constrainAs(box4) {})
        }

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667837.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号