我有以下代码

    LazyColumn(
        contentPadding = PaddingValues(all = 64.dp),
        verticalArrangement = Arrangement.spacedBy(16.dp),
    ) {
        item {
            Box(
                modifier = Modifier
                    .width(200.dp)
                    .height(200.dp)
                    .border(BorderStroke(2.dp, Color.Green))
            ) {
                Box(modifier = Modifier
                    .fillMaxSize()
                    .sizeIn(100.dp, 200.dp)
                    .requiredWidthIn(150.dp, 180.dp)
                    .requiredHeightIn(150.dp, 180.dp)
                    .border(BorderStroke(3.dp, Color.Red))
                )
            }
        }
    }

结果不出所料.

enter image description here

我刚刚用requiredSizeIn替换了requiredWidthInrequiredHeigthIn,如下所示.

    LazyColumn(
        contentPadding = PaddingValues(all = 64.dp),
        verticalArrangement = Arrangement.spacedBy(16.dp),
    ) {
        item {
            Box(
                modifier = Modifier
                    .width(200.dp)
                    .height(200.dp)
                    .border(BorderStroke(2.dp, Color.Green))
            ) {
                Box(modifier = Modifier
                    .fillMaxSize()
                    .sizeIn(100.dp, 200.dp)
                    .requiredSizeIn(150.dp, 180.dp)
                    .border(BorderStroke(3.dp, Color.Red))
                )
            }
        }

我希望结果是一样的.不知何故,它在高度方面看起来不同.这是为什么?

enter image description here

推荐答案

如果您查看正在使用的每种方法的定义,您会看到:

因此,您的第二个代码片段实际上是在说:

Box(modifier = Modifier
    .fillMaxSize()
    .sizeIn(100.dp, 200.dp)
    .requiredSizeIn(
        minWidth = 150.dp,
        minHeight = 180.dp,
        maxWidth = Dp.Unspecified, // The default
        maxHeight = Dp.Unspecified, // The default
    )
    .border(BorderStroke(3.dp, Color.Red))
)

这不是一回事--您没有像使用requiredWidthInrequiredHeightIn时那样声明任何maxWidthmaxHeight.这就是为什么你会得到一个不同的结果--当你使用requiredSizeIn的时候,你设置的是minHeight,180.dp,而当你使用requiredHeightIn的时候,你使用的是minHeight,150.dp.

如果将所有四个参数都声明为requiredSizeIn,您将看到相同的结果:

Box(modifier = Modifier
    .fillMaxSize()
    .sizeIn(100.dp, 200.dp)
    .requiredSizeIn(
        minWidth = 150.dp,
        minHeight = 150.dp,
        maxWidth = 180.dp,
        maxHeight = 180.dp
    )
    .border(BorderStroke(3.dp, Color.Red))
)

Android相关问答推荐

使用Kotlin的SD卡

图像在Android Studio中显示,但不在设备中显示

Android Gradle/Groovy,如何将文件复制到APK

react 本机生成失败,出现异常.错误:无法确定';<;宏/>;的类型

Android写/读二进制文件到共享存储

错误:参数的类型必须是用@Entity注释的类或其集合/array. java.lang.String tocd);

DatePickerDialog (Android/Kotlin) 的两个问题

Android Studio XML 文本在 ConstraintLayout 中不居中

系统导航栏在某些场景下应用了深色效果

每次在 Jetpack Compose 中调用导航

在 Google Play 中将用户从开放测试转移到生产的过程是怎样的?

记住或不记得derivedStateOf

Android Studio xml 预览问题无法初始化编辑器

Android Jetpack Compose - 每次文本字段值更改时,可组合函数都会重新组合

运行一次 kotlin 流,但在下游收到两次

禁用通知权限后启动前台服务导致崩溃(Android 13)

线圈单元测试 - 如何做到这一点?

Jetpack Compose 中的按钮上的文本未更新

为什么在try 实例化 Mediaplayer 时会出现 NullPointerException?安卓Kotlin

将生成的 AAR 与 Composables 一起使用时未解决的参考