Как поместить макет между другими макетами в RelativeLayout?

У меня есть RelativeLayout, Внутри у меня есть:

  • ImageView 120x120 dp справа.
  • 3 других макета слева:
    • 1-й макет (называется Top) имеет alignParentTop=true
    • 2-й макет (называется снизу) имеет alignParentBottom=true
    • 3-й макет (называемый серединой) находится посередине (ниже сверху и снизу).

Проблема в том, что если я установлю 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>
Другие вопросы по тегам