0

我希望有这样的结果。两个大小分别为 2/3 和 1/3 的块。

在此处输入图像描述

我用这段代码得到了预期的结果。

@Preview(showBackground = true)
@Composable
fun LayoutCheck() {

Column(
    modifier = Modifier.fillMaxSize(),
    horizontalAlignment = Alignment.CenterHorizontally
) {
    Surface(
        modifier = Modifier
            .width(200.dp)
            .weight(3f),
        color = MaterialTheme.colors.primary
    ) {}
    Surface(
        modifier = Modifier
            .width(200.dp)
            .weight(1f),
        color = MaterialTheme.colors.secondary
    ) {}
    }
}

但是当我把它放在一个惰性列中时,似乎没有任何效果。连显示器都没有。

@Preview(showBackground = true)
@Composable
fun LayoutCheck() {
Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {
    LazyColumn(
        modifier = Modifier.fillMaxSize(),
        contentPadding = PaddingValues(20.dp)
    ) {
        item {
            Column(
                modifier = Modifier.fillMaxSize(),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Surface(
                    modifier = Modifier
                        .width(200.dp)
                        .weight(3f),
                    color = MaterialTheme.colors.primary
                ) {}
                Surface(
                    modifier = Modifier
                        .width(200.dp)
                        .weight(1f),
                    color = MaterialTheme.colors.secondary
                ) {}
                }

            }
        }
    }
}

如果我减轻重量并增加一些高度,它会起作用。但我不想在那里硬编码。那么如何使它与重量一起工作。期待一些帮助..

谢谢

注意:我想要滚动功能,这就是为什么要使用LazyColumn

真实场景: 登录屏幕,前 2/3 部分带有徽标,底部 1/3 部分带有文本和按钮

场景1:完美工作:

在此处输入图像描述

场景2:如果用户字体较大或屏幕旋转,他们将无法看到按钮

在此处输入图像描述

4

2 回答 2

1

由于您只有一个项目,只需将 aColumn与垂直滚动一起使用:

val scrollState = rememberScrollState()
Column(
    modifier = Modifier
        .verticalScroll(scrollState),
    horizontalAlignment = Alignment.CenterHorizontally,
) {
    //...
}

此外,如果您想要 2/3 和 1/3,请在第Surface一个weight(2f)修饰符中使用。

于 2021-09-10T15:52:43.827 回答
1

weight您可以通过应用修改器来防止调整文本大小。相反,我建议您使元素间距灵活,如下所示:

Column(
    modifier = Modifier.fillMaxSize(),
    horizontalAlignment = Alignment.CenterHorizontally
) {
    Spacer(Modifier.weight(1f))
    Image(
        painter = painterResource(id = R.drawable.my_image),
        contentDescription = "",
    )
    Spacer(Modifier.weight(1.35f))
    Text(
        "Your app is being reviewed",
    )
    Spacer(Modifier.weight(0.2f))
    Button(onClick = { /*TODO*/ }) {
        Text("Log out")
    }
    Spacer(Modifier.weight(0.2f))
}

垫片说明:

于 2021-09-10T16:07:38.170 回答