Android Jetpack Compose 中的 Modifier.wrapContentWidth() 与 Modifier.width(IntrinsicSize.Max)

Val*_*kov 14 android android-jetpack android-jetpack-compose

假设我想创建一个与其中最宽的子文本一样宽的列。为此,列可以使用修饰符 或,但结果看起来相同。这两个修饰符有什么区别?例如:.wrapContentWidth().width(IntrinsicSize.Max)

Column(
    modifier = Modifier.wrapContentWidth()
//  modifier = Modifier.width(IntrinsicSize.Max)
) {
    Text("short text", Modifier.background(Color.LightGray))
    Text("some longer text", Modifier.background(Color.LightGray))
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

Val*_*kov 17

让我们在文本之间添加一个分隔符。我们希望分隔线与最宽的文本一样宽。

Column(
    modifier = Modifier.wrapContentWidth()
//  modifier = Modifier.width(IntrinsicSize.Max)
) {
    Text("short text", Modifier.background(Color.LightGray))
    Divider(color = Color.Red)
    Text("some longer text", Modifier.background(Color.LightGray))
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

如您所见,如果Modifier.wrapContentWidth()分隔线强制列与其父列一样宽。发生这种情况是因为在幕后Divider使用,并且由于列的不限制其子级宽度,因此分隔线会尽可能地扩展。.fillMaxWidth().wrapContentWidth()

同时Modifier.width(IntrinsicSize.Max)表现也符合我们的预期。如果没有给出约束,分隔符不会占用空间,因此它的固有宽度为 0,并且不会影响列宽。

  • 根据文档,调用“Modifier.width(IntrinsicSize.Max)”将其子项的大小强制设置为与最大内在宽度一样宽。为什么分隔线宽度变成0? (2认同)