首页 > 解决方案 > 动态添加视图并调整父视图组的大小

问题描述

我正在尝试创建一个可扩展/可折叠CardView(根布局),我将在其中动态地将视图添加到垂直线性布局(父布局),特别是 TextInputLayouts。添加视图后,我想调整布局动画流程以适应新添加的视图。我正在做的是:

  1. removeAllViews()家长的呼唤
  2. 迭代一些对象,初始化子视图并添加它们addView()
  3. 计算新高度为:

    val previousMeasuredHeight = parentLayout.measuredHeight
    parentLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)
    
  4. 将父布局动画到新高度:

    val animator = ValueAnimator.ofInt(previousMeasuredHeight, measuredHeight)
    animator.addUpdateListener { valueAnimator ->
        layoutParams.height = valueAnimator.animatedValue as Int
        setLayoutParams(layoutParams)
    }
    animator.start()
    

我面临两个问题:

  1. 当必须显示 TextInputLayout 的错误标签时,它是不可见的,因为父级不够大,无法说明错误标签占用的高度。我想这与使用getMeasuredHeight()正确的方法来计算所需的总高度有关
  2. 当我添加更多视图并展开父布局时,只有最后添加的视图可见,因为它位于父布局的顶部

我也尝试使用 aRecyclerView但也存在问题,例如添加项目时未显示,或者父布局未正确调整大小

我该如何解决这些问题?

标签: javaandroidviewkotlin

解决方案


尝试看一下animateLayoutChanges

它看起来适合您想要实现的目标,并且应该消除您自己计算高度和动画的麻烦。


推荐阅读