Я пытаюсь создать расширяемый / сворачиваемый 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
, но есть и проблемы, например, при добавлении элемента он не отображается или родительский макет неправильно изменяет размер
Как мне решить эти проблемы?