gpt4 book ai didi

android - 如何设置 RecyclerView 项目相对于父项的最大高度

转载 作者:行者123 更新时间:2023-12-04 08:36:11 27 4
gpt4 key购买 nike

按照这个问题中的建议,我几乎已经完成了这项工作
Android percent screen width in RecyclerView item
但是,这为所有 View 设置了一个高度,无论内容如何,​​高度都相同。就我而言,我只想限制 RecyclerView 中的项目的高度。可能与它的高度有关。
在我的房车中,我有一些高度不同的元素,其中一些元素甚至比房车还要高。
我的目标是告诉该项目最多可以达到 RecyclerView 的 60%。高度,到目前为止,我发现实现此目的的唯一方法是每当使用此逻辑将新项目绑定(bind)到 View 持有者时手动设置最大高度:

constraintSet.constrainMaxHeight(viewId, (int) (recyclerView.getMeasuredHeight() * 0.6));
在哪里 recyclerView是对托管 RecyclerView 的引用我使用适配器的方法 onAttachedToRecyclerView 传递给适配器和 viewId是 RV 项目内的主视图 ConstraintLayout Root View ,我用它来控制它可以采用的最大高度。
尽管这可以满足我的需要,但我想为此找到一种更简单/更优化的解决方案,在简单性方面类似于此: https://stackoverflow.com/a/51224889/524695
这意味着任何使用 ViewTreeObserver被排除在外。
有任何想法吗?

最佳答案

我会推荐我在链接答案中使用的相同近似策略:在创建 ViewHolder 时设置最大高度.但是,通用 View不支持 maxHeight属性(property),所以我们将利用 ConstraintLayout来实现我们想要的。
如果您的项目 View 的 Root View 已经是 ConstraintLayout ,太好了,否则你可以把你里面的任何东西都包起来。在这个人为的例子中,我使用了这个布局(FrameLayout 在 XML 中使用 0dp 宽度和 wrap_content 高度):

<androidx.constraintlayout.widget.ConstraintLayout ...>
<FrameLayout ...>
<TextView .../>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
在创建时,我设置了 FrameLayout 的最大高度为 parent 高度的 60%:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflater = LayoutInflater.from(parent.context)
val itemView = inflater.inflate(R.layout.recycler_item, parent, false)
val holder = MyViewHolder(itemView)

val params = holder.frame.layoutParams as ConstraintLayout.LayoutParams
params.matchConstraintMaxHeight = (parent.height * 0.6).toInt()
holder.frame.layoutParams = params

return holder
}

关于android - 如何设置 RecyclerView 项目相对于父项的最大高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64789096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com