动态添加视图并调整父ViewGroup的大小

时间:2018-06-09 16:09:17

标签: java android view kotlin

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

  1. 致电父母的removeAllViews()
  2. 迭代某些对象,初始化子视图并使用addView()
  3. 添加它们
  4. 计算新高度:

    val previousMeasuredHeight = parentLayout.measuredHeight
    parentLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)
    
  5. 将父布局设置为新高度:

    val animator = ValueAnimator.ofInt(previousMeasuredHeight, measuredHeight)
    animator.addUpdateListener { valueAnimator ->
        layoutParams.height = valueAnimator.animatedValue as Int
        setLayoutParams(layoutParams)
    }
    animator.start()
    
  6. 我面临两个问题:

    1. 当必须显示TextInputLayout的错误标签时,它不可见,因为父级不足以说明错误标签占用的高度。我想这与使用getMeasuredHeight()而不是正确的方法计算总所需高度
    2. 有关
    3. 当我添加更多视图并展开父版面时,只有最后添加的视图可见,因为它位于父版面的顶部
    4. 我还尝试使用RecyclerView,但也有一些问题,例如添加项目时未显示,或者父版面没有正确调整大小

      如何解决这些问题?

1 个答案:

答案 0 :(得分:0)

尝试查看animateLayoutChanges

看起来你想要达到的目标是正确的,并且应该消除自己计算身高和制作动画的麻烦。