等价于约束布局 0dp

Fre*_*red 10 android android-jetpack-compose

我一直在尝试使用 compose 实现以下布局:

在此处输入图片说明

为此,我创建了可组合的:

@Preview(showBackground = true)
@Composable
fun element() {
    ConstraintLayout(
        modifier = Modifier.fillMaxWidth()
    ) {
        val (checkbox, title, icon) = createRefs()

        Text(
            text = "This would be some text",
            style = TextStyle(
                color = Color.Black,
                fontSize = 18.sp,
            ),
            modifier = Modifier.constrainAs(title) {
                top.linkTo(parent.top)
                bottom.linkTo(parent.bottom)
                start.linkTo(checkbox.end)
                end.linkTo(icon.start)
            },
        )

        Checkbox(
            checked = false,
            modifier = Modifier.constrainAs(checkbox) {
                top.linkTo(title.top)
                bottom.linkTo(title.bottom)
                start.linkTo(parent.start)
            },
            onCheckedChange = {},
        )

        Icon(
            asset = Icons.Filled.Close,
            modifier = Modifier
                .constrainAs(icon) {
                    top.linkTo(title.top)
                    bottom.linkTo(title.bottom)
                    end.linkTo(parent.end)
                }
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,可组合文本并没有填满整个空间,用户界面如下所示: 在此处输入图片说明

我已经尝试向Text可组合的 like添加修饰符Modifier..fillMaxWidth(),但这会导致:

在此处输入图片说明

我也尝试使用带有水平链的约束集,但无济于事。我知道删除end.linkTo(icon.start)看起来是可以实现的,但是当文本很长时,它会与删除图标重叠。

我在这里缺少什么?当我们说TextView的宽度为时,如何获得与视图系统中相同的结果0dp

Sau*_*rat 14

使用Dimension.fillToConstraints

扩展以匹配约束的维度。应从与此维度相对应的两侧指定链接,以使其工作。

将此行添加到您的Text修改器:

width = Dimension.fillToConstraints
Run Code Online (Sandbox Code Playgroud)

所以就变成了:

Text(
    text = "This would be some text",
    style = TextStyle(
        color = Color.Black,
        fontSize = 18.sp,
    ),
    modifier = Modifier.constrainAs(title) {
        top.linkTo(parent.top)
        bottom.linkTo(parent.bottom)
        start.linkTo(checkbox.end)
        end.linkTo(icon.start)
        width = Dimension.fillToConstraints
    },
)
Run Code Online (Sandbox Code Playgroud)

  • 它位于“自定义尺寸”部分下的 [compose codelab](https://codelabs.developers.google.com/codelabs/jetpack-compose-layouts/#8) 中 (3认同)