Ответ 1
Не делайте кнопки View.INVISIBLE
. Сделайте кнопки View.GONE
. Существует три состояния видимости:
- видимый (нормальный)
- невидимый (пиксели не рисованы, но все еще занимают место)
- ушел (не включен в рендеринг)
Итак, у меня есть одно действие, которое выглядит так:
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>
Не делайте кнопки View.INVISIBLE
. Сделайте кнопки View.GONE
. Существует три состояния видимости:
Использование
android:layout_height="0dp"
android:layout_weight="1"
В дополнение к @CommonsWare ответ
Вы должны использовать макет, который хорошо подходит для всех размеров экрана. Если вы дадите макет фиксированной высоты, такой как android:layout_height="376dp"
, он будет хорошо смотреться только на устройстве (или эмуляторе), на котором вы тестируете. Что вам нужно сделать, так это убедиться, что ваше listview занимает все (и только) пространство, оставшееся от ваших кнопок.
Просмотрите статью и этот ответ, чтобы лучше понять вес макета.
для скрытия вашего виджета
yourEditText.setVisibility(View.GONE)
для видимости вашего виджета
yourEditText.setVisibility(View.VISIBLE)