Изменение видимости нижнего линейного слоя покажет / скроет его. Вам нужно будет дать ему идентификатор, а затем
LinearLayout bottomLayout = (LinearLayout)findViewById(R.id.someId);
bottomLayout.setVisibility(View.GONE)// or View.VISIBLE
Что касается проблемы с прокруткой, которая возникает из-за того, что RelativeLayout накладывается на компоненты представления, поэтому вы можете либо показать / скрыть кнопку, перекрывающую нижнюю часть ListView, либо изменить Relativelayout на LinearLayout, чтобы ListView заканчивался перед кнопкой и изменял видимость
Хотя я не уверен, что это будет выглядеть очень хорошо, когда вы внезапно показываете кнопку, а ListView должен изменить свой размер.
Примечание о видимости
setVisibility(View.GONE);
удалит вид из макета, и другие компоненты могут изменить размер из-за этого. Однако, используя
setVisibility(View.INVISIBLE);
сохраняет пространство, занимаемое представлением в макете, и просто делает вид невидимым, и изменение размера не произойдет.