【发布时间】: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,但也存在一些问题,例如添加项目时未显示,或者父布局未正确调整大小
我该如何解决这些问题?
【问题讨论】: