我有一个有两个按钮的栏目.首先,我对我的列使用了MaxSize,并将按钮的垂直排列设置为底部,如 this张照片. 但我想提高屏幕中心和底部之间的按钮(大约是屏幕尺寸的78%,从顶部see this pic开始),这样它就可以在每个屏幕上响应. 这是我的做法:

 Column(
    modifier = Modifier
        .fillMaxWidth()
        .fillMaxHeight(0.78f),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Bottom

) {
    Button(
        modifier = Modifier.fillMaxWidth(0.7f),
        onClick = {}) {

        Text(text = "Sign Up")
    }

    Button(
        modifier = Modifier.fillMaxWidth(0.7f),
        colors = ButtonDefaults.buttonColors(containerColor = Color.White),
        onClick = {}) {

        Text(
            text = "Sign In",
            color = Brown
        )
    }
}

但问题是,它保持不变,按钮也在底部. 你有什么意见可以做我想要的东西吗?

推荐答案

对你观察到的行为的解释是:

如果使用Surface,则第一个子Composable的最小大小始终与Surface相同.这是Android开发团队做出的intentionally个决定:

表面并不是一个真正的布局.[.]因此,我们提出了ProportateMinConstraints=True的 idea ,现在Surface中的内容必须填充应用于Surface的最小大小.

有两种解决方案:

A)将Surface设置为您需要的精确大小,方法是go 掉Modifier.fillMaxSize()

B)引入中间可合成成分,例如,如下所示的Column:

Surface(
    modifier = Modifier.fillMaxSize()
) {

    Column(
        modifier = Modifier.fillMaxSize()
    ) {

        Column(
            modifier = Modifier
                .fillMaxWidth()
                .fillMaxHeight(0.78f),  // should work now
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Bottom
        ) {
            // ...
        }
    }
}

另请参阅更深入的this stackoverflow question.

Android相关问答推荐

如何让用户与我的应用生成的多个音频文件交互

如何阻止Gradle在编译时生成app-metadata.properties

在Android Studio中,如何在BuildSrc Dependenices Kotlin文件中指定时标记与旧版本的依赖关系

我怎样才能画一条线在喷气背包组成和有一个自定义的角落?

在Jetpack Compose中实现自动换行

AndroidX Media3 迁移指南

ComposeView 抢走了 AndroidTV 内容的焦点

如何避免多次调用 Jetpack Compose 的 onClick 回调

Jetpack Compose 中带有权重的行和 AnimatedVisibility 会 destruct UI

通过 adb 解压并重新安装后 Android 应用程序崩溃

Android Studio XML 文本在 ConstraintLayout 中不居中

Android collectAsStateWithLifecycle() 不在可组合内部收集

如何在jetpack compose中通过lamda返回columnScope/RowScope

可组合的可见性不随状态变化而变化

Material Design 网站的新设计已启动,但我找不到实现选项卡,该选项卡在哪里?

Android Compose:LazyColumn 和 Column with verticalScroll 的区别

Android Studio 错误要求依赖它的库和应用程序针对 Android API 的 33 版或更高版本进行编译.

Android Material Date Range Picker - 如何仅更改所选范围日期的文本 colored颜色 ?

在 Jetpack Compose 中 Select 要省略的文本

升级到 android studio 花栗鼠后,应用程序未安装在模拟器中