Макет с верхним баром, нижний план и оставшееся пространство содержимого

Я схожу с ума от просмотров Android. Я хочу макет с баром сверху (A) и одним баром на нижнем (C) моего приложения с height="wrap_content" . Полное оставшееся пространство в середине (B) должно быть областью содержимого с другим макетом или TextView или любым другим. Но я не могу заставить это работать. Я много пробовал с макетами, но когда я делаю android:layout_height="match_parent" в B, C исчезает. Есть идеи? заранее спасибо Введите описание изображения здесь

Вы можете использовать свойство android: layout_weight для достижения этого, но ваш родительский контейнер должен быть LinearLayout , в моем примере я использую только LinearLayout в качестве дочерних элементов родительского представления, но вы можете использовать другой тип View:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical"> <LinearLayout android:id="@+id/layout_a" android:layout_width="match_parent" android:layout_height="wrap_content"> </LinearLayout> <LinearLayout android:id="@+id/layout_b" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </LinearLayout> <LinearLayout android:id="@+id/layout_c" android:layout_width="match_parent" android:layout_height="wrap_content"> </LinearLayout> </LinearLayout> 

Если вам интересно и хотите знать, как это работает … вот объяснение , удача 🙂

Поместите содержимое в RelativeLayout с alignParentTop и alignParentBottom для контента A и C, а также below и above связанного атрибута с контентом B следующим образом:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <!-- create content A and C before --> <LinearLayout android:id="@+id/A" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:orientation="vertical" > </LinearLayout> <LinearLayout android:id="@+id/C" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="vertical" > </LinearLayout> <!-- create content B regarding the previous ids --> <LinearLayout android:id="@+id/B" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/A" android:layout_above="@id/C" android:orientation="vertical" > </LinearLayout> </RelativeLayout> 

Вы можете попытаться изменить высоту контента B с помощью wrap_content вместо match_parent если это не сработает. Позвольте мне знать, если это помогает.

Использовать вес:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/A" android:layout_width="match_parent" android:layout_height="50dp"> <!-- Your view here or replace FrameLayout --> </FrameLayout> <FrameLayout android:id="@+id/B" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1"> <!-- Your view here or replace FrameLayout --> </FrameLayout> <FrameLayout android:id="@+id/C" android:layout_width="match_parent" android:layout_height="50dp"> <!-- Your view here or replace FrameLayout --> </FrameLayout> </LinearLayout> 

Установка высоты до 0 хороша по соображениям производительности, так как вес все равно изменит ее.

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/top_bar" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp"/> <TextView android:id="@+id/middle_area" android:layout_weight="14" android:layout_width="match_parent" android:layout_height="0dp"/> <TextView android:id="@+id/bottom_bar" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp"/> 

Android_layout_weight в сочетании с LinearLayout может сделать трюк для вас. Попробуйте приведенный выше код и настройте android_layout_weight в соответствии с вашими потребностями. В моем примере верхняя панель займет 1/16 экрана экрана, нижняя панель займет 1/16 экрана, а средняя_решетка займет 14/16 экрана. Вы можете изменить номера в соответствии с вашими потребностями.