Как настроить высоту ConstraintLayout с помощью высоты Recyclerview? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу иметь представление ресайклера со списком вещей с неизвестным номером и кнопкой под RecyclerView. Я хочу, чтобы высота всего ConstraintLayout была гибкой с высотой моего RecyclerView, т.е. если список короткий, оберните содержимое, а если список длинный, просто заполните весь экран. Теперь, независимо от длины списка, ConstraintLayout заполнит весь экран. У меня уже есть все wrap_content, но внизу все еще есть пустое место. Я хочу, чтобы моя кнопка всегда отображалась внизу. Кто-нибудь знает, как бороться с этой проблемой?

1 Ответ

0 голосов
/ 04 августа 2020

Я думаю, вы пытаетесь достичь этого:

Ваш макет ограничения будет родительским (root) с родительским элементом соответствия как для ширины, так и для высоты, поэтому он займет весь экран.

Затем поместите кнопку, левая и правая стороны должны соединиться со сторонами макета ограничения, а нижняя часть кнопки также должна соединиться с нижней частью макета (только 3 ограничения: справа налево, слева налево и снизу к низ). Оберните содержимое как по ширине, так и по высоте.

recyclerView будет соединяться почти одинаково, сверху вниз, слева направо и справа налево с constraintLayout, но нижняя часть должна соединяться с верхней частью вашей кнопки. Наконец, выберите соответствующий родительский элемент для ширины и веса.

Таким образом, ваша кнопка всегда будет в нижней части экрана, а высота просмотра ресайклера будет go от верхней части экрана до верхней части вашей кнопки .

Если вы хотите изменить ограничения вашего макета в соответствии с некоторыми условиями (например, достичь определенного c количества элементов в вашем списке), вам необходимо сделать это программно.

Выбрать по по умолчанию ваша высота просмотра ресайклера равна wrap_content, а в коде напишите метод, который будет наблюдать каждый раз, когда элемент добавляется или удаляется из вашего списка. Создайте условное выражение, которое говорит, что число recyclerView.count () == и если оно истинно, измените ограничение constraintLayout и дочерние ограничения на что-то вроде этого (пример):

ConstraintLayout constraintLayout = findViewById(R.id.parent_layout);
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.connect(R.id.recycler,ConstraintSet.BOTTOM, R.id.button,ConstraintSet.TOP,0);
 constraintSet.applyTo(constraintLayout);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...