kotlin Jetpack合成行项目高度fillMaxHeight不适用于纵横比

0lvr5msh  于 2022-12-30  发布在  Kotlin
关注(0)|答案(1)|浏览(134)

我正在尝试构建以下布局:

到目前为止,我有以下代码:

Column(
        modifier = Modifier
            .fillMaxSize()
            .verticalScroll(rememberScrollState())
            .padding(8.dp)
    ) {

        //First Row
        WidgetComposed(
            Modifier
                .fillMaxWidth()
                .height(300.dp),
            bgColor = Color.Red,
            widgetName = "Widget 1"
        )

        Spacer(modifier = Modifier.height(8.dp))

        // Second Row
        Row(modifier = Modifier
            .fillMaxWidth()
            .wrapContentHeight(), horizontalArrangement = Arrangement.SpaceBetween) {
            WidgetComposed(
                Modifier
                    .fillMaxWidth(0.6f)
                    .aspectRatio(2f / 3f, true),
                bgColor = Color.Green,
                widgetName = "Widget 2 (2:3)"
            )

            Spacer(modifier = Modifier.width(8.dp))

            Column(modifier = Modifier
                .fillMaxHeight()) {
                WidgetComposed(
                    Modifier
                        .fillMaxWidth()
                        .weight(1f),
                    bgColor = Color.Blue,
                    widgetName = "Widget 3"
                )

                Spacer(modifier = Modifier.height(8.dp))

                WidgetComposed(
                    Modifier
                        .fillMaxWidth()
                        .weight(1f),
                    bgColor = Color.Cyan,
                    widgetName = "Widget 4"
                )
            }
        }

它告诉我:

窗口小部件3和4的列没有填充父行的高度。如果我把高度值硬编码它的工作。
纵横比和60%的宽度对于Widget 2来说是很重要的。
WidgetCompose只是一张卡片和一个盒子:

@Composable
fun WidgetComposed(modifier: Modifier = Modifier, bgColor: Color, widgetName: String) {
    Card(modifier = modifier, shape = RoundedCornerShape(8.dp), backgroundColor = bgColor) {
        Box(modifier = Modifier.padding(16.dp), contentAlignment = Alignment.Center) {
            Text(text = widgetName)
        }
    }
}

如何让窗口小部件3和4的列自动填充可用高度?最好不使用.onGloballyPositioned修饰符

m528fe3b

m528fe3b1#

您可以用途:

Row(
        modifier = Modifier
            .fillMaxWidth()
            .height(IntrinsicSize.Min),
        horizontalArrangement = Arrangement.SpaceBetween
    ) {
        WidgetComposed(
            Modifier
                .weight(0.6f)
                .aspectRatio(2f / 3f, true),
           //...
        )

        Spacer(modifier = Modifier.width(8.dp).fillMaxHeight())

        Column(
            modifier = Modifier
                .weight(0.4f)
                .fillMaxHeight()
        ) {
           //..
        }

   }

相关问题