Intereting Posts
Android: проблемы с Unicode / Charset при отправке SMS (sendTextMessage) Как предотвратить браузер Chrome Chrome Chrome для отображения лупы, когда пользователи нажимают кнопку? Как сделать меню боковой панели Недостаток ящика навигации на Android Когда использовать handler.post () и когда в новую тему () Android OpenGL ES GL10 или GL11 Какое разрешение экрана я должен учитывать при разработке приложения для Android? Подключение приложений для Android в базу данных mysql Получить в реальном времени – не установить время в Android Как добавить несколько параметров одного и того же массива с помощью Retrofit? Отключить и включить изменения ориентации в активности на Android программно Стиль панели инструментов Android Android Studio не запускается: не удалось найти или загрузить основной класс com.intellij.idea.Main Как программно заблокировать экран в Android? Как импортировать сертификат CA в Android 4.4.2 в эмулятор?

Как сделать линейное заполнение оставшегося пространства в режиме релятивирования?

У меня есть relativelayout с тремя linearlayouts как дети. Последний имеет фиксированную высоту и имеет android: layout_alignParentBottom установлен на «true». В то время как средний расположен правильно ниже первого, он доходит до нижней части экрана, так что его нижняя часть перекрывается третьей.

Что не так?

благодаря

<?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="fill_parent" > <LinearLayout android:id="@+id/category" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:orientation="horizontal" > <ImageView android:id="@+id/back_btn" android:layout_width="29dp" android:layout_height="34dp" android:layout_gravity="center_vertical" android:src="@drawable/red_arrow_left" /> <TextView android:id="@+id/cat_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:orientation="horizontal" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" /> <TextView android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" android:padding="10dp" android:text="@string/no_item" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:orientation="horizontal" > //stuff </LinearLayout> </RelativeLayout> 

Solutions Collecting From Web of "Как сделать линейное заполнение оставшегося пространства в режиме релятивирования?"

Nooo … решение намного проще! Вы забыли сказать, что хотите сказать, что второй линейный макет должен быть выше третьего 🙂 Да, второй линейный макет должен иметь BOTH android:layout_below="@+id/category" и android:layout_above="@+id/nav_bar" . Я тестировал его, и он работает.

Но, конечно, вы можете использовать весы для архивирования одних и тех же результатов, это будет сложнее …

Ваш XML с изменением, о котором я упоминал (протестировал его в eclipse):

 <?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="fill_parent" > <LinearLayout android:id="@+id/category" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:orientation="horizontal" > <ImageView android:id="@+id/back_btn" android:layout_width="29dp" android:layout_height="34dp" android:layout_gravity="center_vertical" android:src="@drawable/red_arrow_left" /> <TextView android:id="@+id/cat_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/nav_bar" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:orientation="horizontal" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" /> <TextView android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" android:padding="10dp" android:text="@string/no_item" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:orientation="horizontal" > //stuff </LinearLayout> </RelativeLayout> 

Вы можете попробовать использовать весы для управления относительными размерами дочерних макетов. В моем блоге есть статья, которая дает некоторую информацию об использовании весов макета.

В качестве примера попробуйте следующее:

 <?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" > <LinearLayout android:id="@+id/category" android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > <ImageView android:id="@+id/back_btn" android:layout_width="29dp" android:layout_height="34dp" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/cat_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:layout_weight="1" android:orientation="horizontal" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" /> <TextView android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" android:padding="10dp" android:text="no_item" /> </LinearLayout> <LinearLayout android:id="@+id/nav_bar" android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" > //stuff </LinearLayout> </LinearLayout> 

RelativeLayout был заменен на LinearLayout , все относительные метки позиционирования были удалены, а атрибут layout_weight добавлен в центр LinearLayout который заставит его растягиваться, чтобы заполнить доступное пространство.

Вы должны добавить id ко второй LinearLayout

  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:@+id/YOUR_ID> 

И в третьем макете добавьте android:layout_below=@id/YOUR_ID

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" android:layout_below=@id/YOUR_ID android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true">