相对于jetpack中的其他元素创建垂直链组成ConstraintLayout?

Posted

技术标签:

【中文标题】相对于jetpack中的其他元素创建垂直链组成ConstraintLayout?【英文标题】:Create vertical chain with respect to other element in jetpack compose ConstraintLayout? 【发布时间】:2022-01-07 21:45:30 【问题描述】:

我想用chainStyle链接以图像为中心的标题和描述文本。打包如何在jetpack compose中实现这一点。

当我使用 createVerticalChain() 它的创建链相对于不是我想要的父容器时,有没有办法实现这一点?

【问题讨论】:

【参考方案1】:

有两种解决方案。第一种方案要求圆圈右侧的内容高度是固定的,而第二种方案不固定而是受约束:

class MainActivity : ComponentActivity() 
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)

        startActivity(intent)

        setContent 
            Column(modifier = Modifier.fillMaxSize()) 
 
                // First solution

                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .wrapContentHeight()
                ) 
                    Box(
                        modifier = Modifier
                            .size(100.dp)
                            .background(color = Color.Red, shape = RoundedCornerShape(50.dp))
                    )

                    Column(
                        modifier = Modifier
                            .height(100.dp)
                            .padding(start = 20.dp), verticalArrangement = Arrangement.Center
                    ) 
                        Text("Line 1 goes here")
                        Text("Line 2 goes here")
                    
                

                Spacer(modifier = Modifier
                    .requiredHeight(30.dp)
                    .fillMaxWidth())


                // Second solution

                ConstraintLayout(modifier = Modifier.fillMaxWidth()) 
                    val (left, right) = createRefs()

                    Box(modifier = Modifier
                        .size(100.dp)
                        .background(color = Color.Red, shape = RoundedCornerShape(50.dp))
                        .constrainAs(left) 
                            start.linkTo(parent.start)
                            top.linkTo(parent.top)
                            bottom.linkTo(parent.bottom)
                        )

                    Column(
                        verticalArrangement = Arrangement.Center,
                        modifier = Modifier
                            .padding(start = 20.dp)
                            .constrainAs(right) 
                                start.linkTo(left.end)
                                top.linkTo(left.top)
                                end.linkTo(parent.end)
                                bottom.linkTo(left.bottom)
                                width = Dimension.fillToConstraints
                                height = Dimension.fillToConstraints
                            ) 

                        Text("Line 1 goes here")
                        Text("Line 2 goes here")
                    
                
            
        
    

【讨论】:

感谢您的回复,但我已经在使用此解决方案,我正在寻找仅使用约束布局的解决方案【参考方案2】:

createVerticalChain() 对我来说很好,只要记住正确设置constrainAs

ConstraintLayout(modifier = Modifier.fillMaxWidth()) 
    val (box, text1, text2) = createRefs()

    createVerticalChain(text1, text2, chainStyle = ChainStyle.Packed)

    Box(modifier = Modifier
        .size(100.dp)
        .padding(16.dp)
        .background(color = Color.Red, shape = RoundedCornerShape(50.dp))
        .constrainAs(box) 
            start.linkTo(parent.start)
            top.linkTo(parent.top)
            bottom.linkTo(parent.bottom)
        )

    Text("Line 1 goes here",
        modifier = Modifier
            .constrainAs(text1) 
                start.linkTo(box.end)
                end.linkTo(parent.end)
                top.linkTo(parent.top)
                bottom.linkTo(text2.top)
                width = Dimension.fillToConstraints
            
    )

    Text("Line 2 goes here",
        modifier = Modifier
            .constrainAs(text2) 
                start.linkTo(box.end)
                end.linkTo(parent.end)
                top.linkTo(text1.bottom)
                bottom.linkTo(parent.bottom)
                width = Dimension.fillToConstraints
            
    )

【讨论】:

以上是关于相对于jetpack中的其他元素创建垂直链组成ConstraintLayout?的主要内容,如果未能解决你的问题,请参考以下文章

js创建链表

百度云直链下载-IDM+网页解析

Jetpack 中的权重组成

Jetpack 中的地图组成

JS若何将在页面上取得的元素坐标转换成屏幕坐标??

四分之一车辆垂向动力学模型