Как поместить макет между другими макетами в RelativeLayout?
У меня есть RelativeLayout
, Внутри у меня есть:
ImageView
120x120 dp справа.- 3 других макета слева:
- 1-й макет (называется Top) имеет
alignParentTop=true
- 2-й макет (называется снизу) имеет
alignParentBottom=true
- 3-й макет (называемый серединой) находится посередине (ниже сверху и снизу).
- 1-й макет (называется Top) имеет
Проблема в том, что если я установлю layout_width="wrap_content"
для контейнера (RelativeLayout
), Я не вижу среднего макета.
И если я установлю его на некоторые значения (например: 144dp
) Увижу среднюю раскладку.
Вот структура макета (я скрываю некоторые дочерние макеты внутри и показывает только основные макеты).
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<LinearLayout
android:id="@+id/top"
android:background="#eeaaee"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
<LinearLayout
android:id="@+id/bottom"
android:background="#22eeaa"
android:layout_toLeftOf="@+id/image"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
<LinearLayout
android:id="@+id/middle"
android:layout_width="match_parent"
android:background="#44ee22"
android:layout_toLeftOf="@+id/image"
android:layout_height="64dp"
android:layout_below="@+id/top"
android:layout_above="@+id/bottom">
<TextView
android:id="@+id/hotnews_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="14sp"
/>
</LinearLayout>
<ImageView
android:id="@+id/image"
android:layout_alignParentEnd="true"
android:layout_width="120dp"
android:layout_height="120dp"
android:scaleType="centerCrop"/>
</RelativeLayout>
1 ответ
Если вы хотите поместить макет между какими-то макетами, лучше использовать linearlayout в качестве родительского для всех трех (верхний, средний, нижний) макетов и использовать его ориентацию и вес. Я использовал фиксированную высоту линейного макета, чтобы различать вид сверху, снизу и сверху. измените его в соответствии с вашими потребностями.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#eeaaee"
android:orientation="horizontal"></LinearLayout>
<LinearLayout
android:id="@+id/bottom"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#22eeaa"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/middle"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#44ee22">
<TextView
android:id="@+id/hotnews_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/image"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_weight="1"
android:scaleType="centerCrop" />
</LinearLayout>
</RelativeLayout>