Использование RelativeLayout для вертикального разделения двух фрагментов равномерно

Я пытаюсь создать простой макет с тремя фрагментами. Слева, я хочу два фрагмента над каждым, каждый из которых занимает 50% высоты экрана. Справа я хочу один большой фрагмент контейнера, например:

+-----+-----------------+ | f1 | detail_container| | | | +-----+ | | f2 | | | | | +-----+-----------------+ 

Я получил его работу с двумя LinearLayouts , используя layout_height="0dp" и layout_weight="1" , но я получил сообщение, что это плохо для производительности, поэтому я решил использовать RelativeLayout . Теперь у меня есть следующее:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="0dp" android:layout_marginRight="0dp" android:baselineAligned="false" android:divider="?android:attr/dividerHorizontal" android:orientation="horizontal" android:showDividers="middle" tools:context=".MainActivity" > <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="1" > <fragment android:id="@+id/fragment1" android:name="com.example.Fragment1" android:layout_width="wrap_content" android:layout_height="" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" tools:layout="@android:layout/list_content" /> <fragment android:id="@+id/fragment2" android:name="com.example.Fragment2" android:layout_width="wrap_content" android:layout_height="" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" tools:layout="@android:layout/list_content" /> </RelativeLayout> <FrameLayout android:id="@+id/action_detail_container" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" /> </LinearLayout> 

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

Вот мое решение с общим обходным решением, чтобы избежать вложенного веса:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="0dp" android:layout_marginRight="0dp" android:baselineAligned="false" android:divider="?android:attr/dividerHorizontal" android:orientation="horizontal" android:showDividers="middle" tools:context=".MainActivity" > <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="1" > <View android:id="@+id/dummyView" android:layout_width="0dp" android:layout_height="0dp" android:layout_centerInParent="true"/> <fragment android:id="@+id/fragment1" android:name="com.example.Fragment1" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignTop="@id/dummyView" tools:layout="@android:layout/list_content" /> <fragment android:id="@+id/fragment2" android:name="com.example.Fragment2" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignBottom="@id/dummyView" tools:layout="@android:layout/list_content" /> </RelativeLayout> <FrameLayout android:id="@+id/action_detail_container" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" /> </LinearLayout> 

Почему бы не переключить его, т. LinearLayout Использовать RelativeLayout качестве корневого представления и вертикальный LinearLayout в качестве контейнера для фрагментов? Просто используйте alignParentLeft в контейнере и toRightOf в FrameLayout .

Использование весов обычно просто плохо для производительности, когда они вложены (см., Например, пример). Поэтому в вашем случае вы можете использовать их.
В противном случае вы можете создать пустой вид в середине, чтобы помочь вам расположить остальных:

 <RelativeLayout ... > <View androi:id="@+id/separator" android:layout_centerVertical="true" android:layout_width="0" android:layout_height="0" > <fragment android:layout_above="@id/separator" ... > <fragment android:layout_below="@id/separator" ... > </RelativeLayout> 

Попробуйте этот путь

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:baselineAligned="false" android:divider="?android:attr/dividerHorizontal" android:orientation="horizontal" android:showDividers="middle" tools:context=".MainActivity" > <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="1" > <fragment android:id="@+id/fragment1" android:name="com.example.Fragment1" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" tools:layout="@android:layout/list_content" /> <fragment android:id="@+id/fragment2" android:name="com.example.Fragment2" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_marginTop="5dp" android:layout_weight="1" tools:layout="@android:layout/list_content" /> </LinearLayout> <FrameLayout android:id="@+id/action_detail_container" android:layout_width="0dp" android:layout_marginLeft="5dp" android:layout_height="match_parent" android:layout_weight="3" /> </LinearLayout>