【问题标题】:android, how to set a same height for my cards without hardcode in lazy rowandroid,如何在lazyrow中为我的卡片设置相同的高度而无需硬代码
【发布时间】:2022-09-27 17:32:01
【问题描述】:

我有一个惰性行,其中包含具有包装内容高度的项目。 我的问题是这些项目的某些文本是该项目的可见或不可见基础。所以那辆推车的高度不是固定的,它会改变。

如何找到该项目的最大高度(包含所有文本)并将该高度设置为所有项目。

我不想为我的项目设置硬代码高度(如 300.dp)

正如你在这张图片中看到的:下面的按钮根据卡片的高度改变它的位置。 我希望那个按钮固定在它的位置,而不是上下移动。 https://i.stack.imgur.com/R0Tc6.png

我该如何解决这个问题?

  • 如果您可以向我们展示输出图像和预期输出图像将会有所帮助......

标签: android kotlin android-jetpack-compose height


【解决方案1】:

Compose 的规则之一是您应该只测量您的孩子一次;测量孩子两次会引发运行时异常。但是,有时在测量孩子之前,您需要一些关于孩子的信息。

如果您查看Intrinsic Measurements 的 Android 文档,您将清楚地知道该怎么做。在您的场景中,您需要强制 Compose 测量孩子的大小,以相应地调整父可组合的尺寸。

这个medium article 提供了一个关于如何在 Compose 中使用 IntrinsicSize 的更简单示例。

【讨论】:

【解决方案2】:

您是否尝试过围绕 onGloballyPositioned{..} 修饰符属性进行试验?

val localDensity = LocalDensity.current
                
Text(modifier = Modifier
           .onGloballyPositioned { thisText ->
               with (localDensity) {
                   thisText.size.height.toDp()
               }
           },
           text = "Text"
)

编辑:在LazyList 组件中不允许进行内部测量,看看这篇文章,看起来和你的很相似。

Jetpack Compose: Row with all items same height

另外,Constraintlayout 可能是个不错的尝试。

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 2018-01-20
    • 2019-08-26
    • 2020-12-23
    • 2017-06-27
    • 2020-01-15
    • 2019-12-01
    • 2020-10-03
    • 2016-06-22
    相关资源
    最近更新 更多