繁体   English   中英

减小jetpack compose中图标的大小以匹配行高

[英]decrease size of icon in jetpack compose to match row height

我有以下可组合的。

@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()
        )
    }
}

图标的高度没有从 24.dp 减少。 有什么办法可以实现这种行为。 我希望图标大小只是父行的高度。 如果文字很大。 图标大小增加。 我认为它的图标最小尺寸必须为 24.dp。 如何让图标变小?

您的代码实际上按预期工作 - 这就是内在计算的工作方式。

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

使用Modifier.layout您可以更改视图的大小及其位置。 通常你会这样使用它:

  1. 第一个参数, measurable是一个对象,您可以在其上调用带有constraintsmeasure - 第二个layout参数。 measure将计算您的视图将采用的大小,并计算constraints
  2. layout中,您需要传递所需的视图大小 - 通常可以从上一步的placeable中获取。
  3. layout内部,您需要在具有所需偏移量的placeable上调用place

随着height(IntrinsicSize.Min) layout内容被多次调用:

  1. 在第一次调用期间,最大高度约束等于Infinity ,因此内在计算可以选择正确的尺寸而忽略父尺寸。
  2. 在最后一次调用中,最大高度约束等于计算出的父级固有高度。

在我第一次调用的代码中,当高度约束等于Infinity时,我说这个视图的大小为零,所以它不计入内在测量中。 定义固有高度后,我可以使用最终约束对其进行布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM