java - 动态添加视图并调整父视图组的大小
问题描述
我正在尝试创建一个可扩展/可折叠CardView
(根布局),我将在其中动态地将视图添加到垂直线性布局(父布局),特别是 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()
正确的方法来计算所需的总高度有关 - 当我添加更多视图并展开父布局时,只有最后添加的视图可见,因为它位于父布局的顶部
我也尝试使用 aRecyclerView
但也存在问题,例如添加项目时未显示,或者父布局未正确调整大小
我该如何解决这些问题?
解决方案
尝试看一下animateLayoutChanges。
它看起来适合您想要实现的目标,并且应该消除您自己计算高度和动画的麻烦。
推荐阅读
- c++ - Opencv imshow 显示奇怪的图像
- java - Umano AndroidSlidingUpPanel 如何在面板可见时禁用触摸?
- java - JDialog 在 Windows 10 上具有隐式最小宽度,如何绕过它?
- python - Python 碰撞检测与边界的 x 和 y 坐标
- python - 无法生成 tkinter 滚动条
- mysql - 如何在sql中每天一次执行触发器
- javascript - 以模态显示搜索栏查询结果
- reactjs - 测试解构的上下文消费者
- javascript - 如何在 JavaScript 中为 HTML 元素使用动态 id?
- mysql - 内部连接中的mysql随机选择