android 为什么requiredSizeIn与requiredWidthIn + requiredHeightIn参数值相同时不相同?

jgovgodb  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(99)

我有下面的代码

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))
                )
            }
        }
    }

果然不出所料。

我只是将requiredWidthInrequiredHeigthIn替换为requiredSizeIn,如下所示。

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))
                )
            }
        }

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

qrjkbowd

qrjkbowd1#

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

  • requiredWidthIn(min: Dp, max: Dp)
  • requiredHeightIn(min: Dp, max: Dp)
  • requiredSizeIn(minWidth: Dp, minHeight: Dp, maxWidth: Dp, maxHeight: Dp)

所以你的第二个代码片段实际上是说:

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时,你设置的是180.dpminHeight,而当你使用requiredHeightIn时,你使用的是minHeight150.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))
)

相关问题