Dik*_*hrz 11 icons android modifier android-jetpack-compose composable
我有以下可组合项。
@Composable
fun Temp() {
Row(
modifier = Modifier
.background(Color.Red)
.height(IntrinsicSize.Min)
.fillMaxWidth()
) {
Text(text = "Hello", fontSize = 10.sp)
Icon(
imageVector = Icons.Default.Star,
contentDescription = "Star",
modifier = Modifier.fillMaxHeight()
)
}
}
Run Code Online (Sandbox Code Playgroud)
图标的高度从 24.dp 开始并没有减少。有什么办法可以实现这种行为。我希望图标大小只是父行的高度。如果文字很大。图标尺寸增大。我认为图标最小尺寸必须为 24.dp。如何让图标变小?
Phi*_*hov 13
您的代码实际上按预期工作 - 这就是内在计算的工作方式。
Compose 检查每个视图的最小高度并选择这些值中的最大值。在您的情况下,图像的最小高度与图像的固有尺寸有关,在 的情况下您无法控制Icons.Default。
一个可能的解决方案是使用Modifier.layout. 当 Compose 计算固有高度时,高度约束将是无限的,在这种情况下,您可以将其布局为零大小视图,以便您的文本将是最高的。确定固有高度后,您可以测量并定位图标:
Row(
modifier = Modifier
.background(Color.Red)
.height(IntrinsicSize.Min)
.fillMaxWidth()
) {
Text(text = "Hello", fontSize = 10.sp)
Icon(
imageVector = Icons.Default.Star,
contentDescription = null,
modifier = Modifier
.layout { measurable, constraints ->
if (constraints.maxHeight == Constraints.Infinity) {
layout(0, 0) {}
} else {
val placeable = measurable.measure(constraints)
layout(placeable.width, placeable.height) {
placeable.place(0, 0)
}
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
使用Modifier.layout您可以更改视图的大小及其位置。通常你这样使用它:
measurable是一个可以使用measure第二constraints个layout参数调用的对象。measure将计算您的视图将占用的大小,并进行constraints计数。layout获取。placeablelayout你需要使用所需的偏移量place来调用placeable。内容被height(IntrinsicSize.Min) layout多次调用:
Infinity,因此内部计算可以选择正确的尺寸,忽略父尺寸。在我的代码中,在第一次调用期间,当高度约束等于 时Infinity,我说该视图的大小为零,因此它不计入内在测量中。定义固有高度后,我可以使用最终约束对其进行布局。
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |