提问者:小点点

Android Compose ConstraintLayout问题


撰写版本:1.0.0-beta04

constraintlayout-compose版本:1.0.0-alpha05

可组合:

@Composable
fun comp1() {
    Surface(Modifier
        .fillMaxWidth()
        .height(50.dp), color = Color.Red) {

        ConstraintLayout(Modifier.fillMaxSize()) {
            val guide_line = createGuidelineFromAbsoluteRight(.2f)
            val (icon_ref, box_ref, spacer_ref) = createRefs()
            
            Icon(Icons.Filled.Search, null,
                modifier = Modifier.constrainAs(icon_ref) {
                    absoluteLeft.linkTo(guide_line)
                    absoluteRight.linkTo(parent.absoluteRight)
                    top.linkTo(parent.top)
                    bottom.linkTo(parent.bottom)
                }
            ) 

            Box(Modifier
                .background(Color.Blue)
                .fillMaxSize()
                .constrainAs(box_ref) {
                    absoluteLeft.linkTo(parent.absoluteLeft)
                    absoluteRight.linkTo(guide_line)
                    top.linkTo(parent.top)
                    bottom.linkTo(parent.bottom)
                }) {}

            Spacer(Modifier
                .background(Color.Yellow)
                .width(2.dp)
                .fillMaxHeight()
                .constrainAs(spacer_ref) {
                    absoluteRight.linkTo(guide_line)
                })
        }
    }

}

预览:

正如您所看到的,这些项并不像预期的那样受到约束。view_basedconstraintlayout中的视图不会在屏幕之外绘制,除非约束被弄乱了或者是故意的。


共1个答案

匿名用户

composable中删除absoluteReft(或开始约束)

 Box(Modifier
    .background(Color.Blue)
    .fillMaxSize()
    .constrainAs(box_ref) {
        //absoluteLeft.linkTo(parent.absoluteLeft)
        absoluteRight.linkTo(guide_line)
        top.linkTo(parent.top)
        bottom.linkTo(parent.bottom)
    }
 ){}