Невидимые компоненты по-прежнему занимают пространство

Итак, у меня есть одно действие, которое выглядит так:

http://i.imgur.com/UzexgEA.jpg

Как вы можете видеть, у него есть кнопка, список и кнопка.

Если выполняются определенные условия, я хочу скрыть обе кнопки, просто показывая список, но, как вы можете видеть на следующем изображении, кнопки все еще занимают место:

http://i.imgur.com/OyLIfSk.jpg

Итак, мой вопрос, что я могу сделать, чтобы увеличить список, чтобы извлечь это пространство?

Вот мой макет для кнопок и списка:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/findSelected"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="registrarAsistencia"
        android:text="Registrar Asistencia" />

    <ListView
        android:id="@+id/listaAlumnos"
        android:layout_width="fill_parent"
        android:layout_height="376dp"
        android:layout_weight="2.29" />

    <Button
        android:id="@+id/btnChecarBoxes"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="seleccionarTodosNinguno"
        android:text="Seleccionar / Deseleccionar todo" />
</LinearLayout>

И вот это макет для содержимого списка:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

  <LinearLayout
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:orientation="vertical" >

      <TextView
          android:id="@+id/rowTextView"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:padding="10dp"
          android:textSize="16sp" 
          android:textStyle="bold"/>

      <TextView
          android:id="@+id/rowTextView2"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:padding="10dp"
          android:textSize="16sp" 
          android:textStyle="italic"/>

  </LinearLayout>

  <CheckBox
      android:id="@+id/CheckBox01"
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:layout_alignParentRight="true"
      android:layout_centerVertical="true"
      android:focusable="false"
      android:padding="10dp" />
</RelativeLayout>

Ответ 1

Не делайте кнопки View.INVISIBLE. Сделайте кнопки View.GONE. Существует три состояния видимости:

  • видимый (нормальный)
  • невидимый (пиксели не рисованы, но все еще занимают место)
  • ушел (не включен в рендеринг)

Ответ 2

Использование

android:layout_height="0dp"
android:layout_weight="1"

В дополнение к @CommonsWare ответ

Вы должны использовать макет, который хорошо подходит для всех размеров экрана. Если вы дадите макет фиксированной высоты, такой как android:layout_height="376dp", он будет хорошо смотреться только на устройстве (или эмуляторе), на котором вы тестируете. Что вам нужно сделать, так это убедиться, что ваше listview занимает все (и только) пространство, оставшееся от ваших кнопок.

Просмотрите статью и этот ответ, чтобы лучше понять вес макета.

Ответ 3

для скрытия вашего виджета

   yourEditText.setVisibility(View.GONE)

для видимости вашего виджета

   yourEditText.setVisibility(View.VISIBLE)