Итак, у меня есть вид с прокруткой, и мне нужно отрегулировать высоту своего вида с прокруткой, чтобы убедиться, что он остается выше модального всплывающего вида. Я не могу использовать макет ограничения, потому что это модальное всплывающее представление не является потомком того же родителя представления. Поэтому я пытаюсь динамически обновить параметры макета представлений прокрутки, чтобы его высота была достаточно маленькой, чтобы не скрываться за модальным всплывающим окном.
Высота всплывающего вида может изменяться в точках, поэтому у меня есть обратный вызов, который возвращает новую высоту модального вида каждый раз, когда он изменяется. В этом обратном вызове я настраиваю высоту прокрутки следующим образом:
someModalView.onHeightChanged = { newViewHeight ->
Log.d("TESTHEIGHT", "PreHeight = ${scrollView.height}")
scrollView.layoutParams = FrameLayout.LayoutParams(scrollView.width, scrollView.height - newViewHeight)
scrollView.requestLayout()
Log.d("TESTHEIGHT", "PostHeight = ${scrollView.height}")
}
К сожалению, приведенный выше код, похоже, ничего не делает, и в моих журналах я вижу, что PreHeight печатает ту же высоту, что и PostHeight. Любая причина, по которой высота просмотров не меняется?
Кроме того, я отладил ее и убедился, что newViewHeight не равен 0, и это не так, это ~ 800
Закончилось тем, что все заработало, добавив к виду отступ, а не изменив его высоту, например:
someModalView.onHeightChanged = { newViewHeight ->
scrollView.setPadding(0, 0, 0, newViewHeight)
}
Это работает именно так, как мне было нужно, но на самом деле это не отвечает на вопрос, поэтому я простооставьте это в ответе для любого, кому это могло бы помочь. Но все равно было бы неплохо знать, почему изменение параметров макета не приведет к обновлению высоты просмотров.