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