Я думаю, вы пытаетесь достичь этого:
Ваш макет ограничения будет родительским (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);