动态添加视图并调整父视图组的大小
Posted
技术标签:
【中文标题】动态添加视图并调整父视图组的大小【英文标题】:Add views dynamically and resize parent ViewGroup 【发布时间】:2018-06-09 16:09:17 【问题描述】:
我正在尝试创建一个可展开/可折叠的CardView
(根布局),我将在其中动态地将视图添加到垂直的LinearLayout(父布局),特别是TextInputLayouts。添加视图后,我想调整布局动画流程以适应新添加的视图。我正在做的是:
-
致电家长的
removeAllViews()
遍历一些对象,初始化子视图并添加addView()
计算新高度为:
val previousMeasuredHeight = parentLayout.measuredHeight
parentLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)
将父布局动画到新高度:
val animator = ValueAnimator.ofInt(previousMeasuredHeight, measuredHeight)
animator.addUpdateListener valueAnimator ->
layoutParams.height = valueAnimator.animatedValue as Int
setLayoutParams(layoutParams)
animator.start()
我面临两个问题:
-
当必须显示 TextInputLayout 的错误标签时,它是不可见的,因为父级不够大,无法考虑错误标签占用的高度。我想这与使用
getMeasuredHeight()
而不是计算所需总高度的正确方法有关
当我添加更多视图并展开父布局时,只有最后添加的视图是可见的,因为它位于父布局的顶部
我也尝试使用RecyclerView
,但也存在一些问题,例如添加项目时未显示,或者父布局未正确调整大小
我该如何解决这些问题?
【问题讨论】:
【参考方案1】:试试看animateLayoutChanges。
它看起来适合您想要实现的目标,并且应该消除您自己计算高度和制作动画的麻烦。
【讨论】:
是的,我知道这一点,问题是因为它是一个可扩展的布局(CardView),因为它无法扩展到全高,所以我需要重新计算父级的实际大小有了新的孩子,如果没有,父母将隐藏孩子,因为它永远不会扩展到新的高度 抱歉,我记得它可以与任何 ViewGroup 一起使用。以上是关于动态添加视图并调整父视图组的大小的主要内容,如果未能解决你的问题,请参考以下文章