Android 匹配列中父级的宽度(Jetpack Compose)

Android 匹配列中父级的宽度(Jetpack Compose),android,android-jetpack-compose,Android,Android Jetpack Compose,默认情况下,列{}具有其最大子元素的宽度。如何使所有其他元素适合父列的宽度?如果使用Modifier.fillMaxWidth()元素将占用整个可用空间,并使父列变大。如何实现与修饰符相同的行为。matchParentWidth()修饰符将提供相同的行为?这里我使用的是修饰符。fillMaxWidth项不会使父列变大: 我通常是这样做的,以实现匹配parentwidth(这是肮脏的,但可以完成工作): 如果将Modifier.width(300.dp)应用到父列,则该列中的子项可以占用的最大宽度

默认情况下,
列{}
具有其最大子元素的宽度。如何使所有其他元素适合父
列的宽度?如果使用
Modifier.fillMaxWidth()
元素将占用整个可用空间,并使父
列变大。如何实现与
修饰符相同的行为。matchParentWidth()
修饰符将提供相同的行为?

这里我使用的是
修饰符。fillMaxWidth
项不会使父列变大:

我通常是这样做的,以实现
匹配parentwidth
(这是肮脏的,但可以完成工作):


如果将
Modifier.width(300.dp)
应用到父列,则该列中的子项可以占用的最大宽度为
300.dp


在此上下文中,对可组合的
文本使用
Modifier.fillMaxWidth()
与使用
Modifier.preferredWidth(300.dp)
同义,因为它只能与其父级可组合的宽度一样宽。

解决方案是利用


我们不使用
Modifier.fillMaxWidth()
而是使用
height(intrinsize.Min)
将宽度与
1.0.0
(使用
1.0.0-beta07
测试)的最大元素的最小宽度相匹配。您可以使用修饰符
.width(intrinsize.Max)

 Column(Modifier.width(IntrinsicSize.Max)) {
        Box(Modifier.fillMaxWidth().background(Color.Gray)) {
            Text("Short text")
        }
        Box(Modifier.fillMaxWidth().background(Color.Yellow)) {
            Text("Extremely long text giving the width of its siblings")
        }
        Box(Modifier.fillMaxWidth().background(Color.Green)) {
            Text("Medium length text")
        }
    }

您好,我在这里寻找动态尺寸。我无法为父列指定固定大小。该列的宽度应与其最宽的子列相同您好,我在这里寻找动态大小。我无法为父列指定固定大小。列的宽度应与其最宽的子列的宽度相同。如果您希望具有像素完美的比例几何体,这是最佳解决方案。谢谢我错过了密度的划分!非常感谢。也是我用它取得的成就:
val context = AmbientContext.current.resources
val displayMetrics = context.displayMetrics
val scrWidth = displayMetrics.widthPixels / displayMetrics.density

Column(modifier = Modifier.width(300
    .dp)) {
    Text(text = "with fillMaxWidth modifier",modifier = Modifier.fillMaxWidth().background(Color.Red))
    Text(text = "without fillMaxWidth modifier",modifier = Modifier
        .preferredWidth(scrWidth.dp)
        .background(Color.Gray))
}
 Column(Modifier.width(IntrinsicSize.Max)) {
        Box(Modifier.fillMaxWidth().background(Color.Gray)) {
            Text("Short text")
        }
        Box(Modifier.fillMaxWidth().background(Color.Yellow)) {
            Text("Extremely long text giving the width of its siblings")
        }
        Box(Modifier.fillMaxWidth().background(Color.Green)) {
            Text("Medium length text")
        }
    }