如果我不将其包装在可组合的列或行中,为什么框可兼容填充最大尺寸? [英] Why Box compasable fill max size if i don't wrap it in a Column or Row composable?
本文介绍了如果我不将其包装在可组合的列或行中,为什么框可兼容填充最大尺寸?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我将大小指定为100.dp
,此代码将填满整个屏幕。
ComposeTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Box(
modifier = Modifier
.width(100.dp)
.height(100.dp)
.clip(RoundedCornerShape(12.dp))
.background(color = Color.Red)
) {
}
}
}
此代码通过填充所需大小正确运行。
ComposeTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Column(modifier = Modifier.fillMaxSize()) {
Box(
modifier = Modifier
.width(100.dp)
.height(100.dp)
.clip(RoundedCornerShape(12.dp))
.background(color = Color.Red)
) {
}
}
}
}
谁能解释一下为什么会这样?
推荐答案
这就是Box
使用propagateMinConstraints
参数设置为true
的方式。Surface
是using它在引擎盖下面。
例如,当Box
具有不能直接指定修饰符的内容并且需要对Box
的内容设置最小大小时,将propagateMinConstraints
设置为true
可能很有用。如果propagateMinConstraints
设置为true
,则Box
上设置的最小大小也将应用于内容,否则最小大小将仅应用于框。
因此,第一级Surface
子项的最小大小约束等于Surface
的大小。
以下是其中一个维护人员explains做出此决定的原因:
Surface
不是真正的布局。我们在FloatingActionButton
上遇到了这样的问题-我们根据规格设置了最小宽度和高度,但用户可以根据需要设置更大的尺寸。现在FloatingActionButton
里面的内容(图标)需要填满Surface
的整个大小,所以我们在上面应用一个涟漪,然后用Surface
的形状来裁剪涟漪。如果我们只是设置Modifier.fillMaxSize()
,它将充满整个屏幕,因为FloatingActionButton
没有指定最大大小。并且由于系统的工作方式,没有这样的信息不被传播。因此,我们提出了propagateMinConstraints=true
的想法,现在Surface
中的内容必须填充应用于Surface
的最小大小。老实说,我不确定解释是否足够清楚:)。但是,如果您的Surface
中需要一些真实的布局和多个元素,则需要手动添加,因此请添加您自己的Box
。
它可以被Modifier.requiredSize
覆盖,或者像您在第二个代码示例中所做的那样,使用另一个容器。您的示例中的Column
的大小仍然等于父Surface
。
这篇关于如果我不将其包装在可组合的列或行中,为什么框可兼容填充最大尺寸?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文