Вес RelativeLayout

В XML-ресурсе макета у меня есть 3 RelativeLayout (s), которые находятся внутри основного RelativeLayout. Вид будет показан вертикально. Эти 3 RelativeLayout() установлены рядом друг с другом, и я хочу, чтобы они заполняли весь экран, не имеет значения, какой будет размер экрана. Мой макет:

<RelativeLayout 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:background="@drawable/backg"
 >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="@dimen/top_mr_image"
    android:src="@drawable/temp" />

<RelativeLayout
    android:id="@+id/r1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/imageView1"
    android:layout_marginLeft="10dp"
    android:background="@drawable/r1bg"
    android:layout_weight="1"

     >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="@dimen/txt_mr_right"
        android:layout_marginRight="@dimen/txt_mr_right"
        android:layout_marginTop="39dp"
        android:text="S"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/textView1"
        android:layout_marginLeft="@dimen/txt_mr_right"
        android:layout_marginRight="@dimen/txt_mr_right"
        android:text="T"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

    <RelativeLayout
        android:id="@+id/r2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignTop="@+id/r1"
        android:layout_toRightOf="@+id/r1"
        android:layout_weight="1" >
    </RelativeLayout>

            <RelativeLayout
        android:id="@+id/r3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignTop="@+id/r2"
        android:layout_toRightOf="@+id/r2"
        android:layout_weight="1" >

    </RelativeLayout>

Я установил weight=1 и layout_width=0dp для layout_width=0dp и этот метод работает с кнопками, я думал, что то же самое будет и с относительнойLayout, кажется, мои мысли были неправильными. Любая идея?

UPD1: я добавил изображение того, что хотел бы иметь

enter image description here

Ответы

Ответ 1

RelativeLayout не обращает внимания на android:layout_weight. (Это свойство LinearLayout.LayoutParams, но не RelativeLayout.LayoutParams.)

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

РЕДАКТИРОВАТЬ. На основе вашего редактирования выглядит так, что вы хотите горизонтальную компоновку трех составных видов, каждый из которых можно кликнуть. Я думаю, что что-то вроде следующего будет работать:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <!-- First column -->
    <LinearLayout
        android:id="@+id/firstColumn"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="..." />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="text 1"
            . . . />
    </LinearLayout>

    <!-- Second column -->
    <LinearLayout . . . >
        . . .
    </LinearLayout>
</LinearLayout>

Если содержимое кнопок неправильное, вы можете заменить представления LinearLayout второго уровня на RelativeLayout, если это поможет лучше организовать макет.

Ответ 2

RelativeLayouts не поддерживают вес. Вам нужно использовать LinearLayout в качестве родительского контейнера, если вы хотите использовать веса.

Ответ 3

Решение очень простое. Я искал распределение веса в относительной компоновке.

Это небольшой трюк для всех подобных ситуаций.

Используйте LinearLayout с андроид: ориентация = "горизонтальная"

Ответ 4

Вы можете использовать Horizontally ориентированный LinearLayout Manager в представлении Recycler View и размещать каждый RelativeLayout в каждом элементе своего Adapter.

Ссылка: Как построить горизонтальный ListView с RecyclerView?

Если ваши RelativeLayouts установлены на фиксированную ширину и высоту, то есть на размер экрана, который вы можете получить из DisplayMatrics, все будет в порядке.

Ссылка: Получить ширину и высоту экрана

Если содержимое ваших RelativeLayouts отличается, вы можете использовать getItemViewType().

Пожалуйста, смотрите: Как создать RecyclerView с несколькими типами просмотра?

Удачного кодирования! :-) С уважением.