Относительный вес
У меня есть 3 RelativeLayout, который находится внутри main_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
для каждого releaseativeLayout, и эта техника работает с кнопками, я думал, что то же самое будет и с относительным Layout, кажется, мои мысли были неправильными. Любая идея?
UPD1: я добавил изображение того, что хотел бы иметь
3 ответа
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
если это поможет лучше организовать макет.
RelativeLayouts не поддерживают вес. Вам нужно использовать LinearLayout в качестве родительского контейнера, если вы хотите использовать весовые коэффициенты.
Решение очень простое. Я искал распределение веса в относительной компоновке.
Это маленький трюк для всех подобных ситуаций.
Используйте LinearLayout с android: ориентация ="горизонтальная"
Ты можешь использовать Horizontally
ориентированного LinearLayout Manager
в Recycler View
и поместите каждый RelativeLayout
в каждом пункте, его Adapter
,
Ссылка: Как построить горизонтальный ListView с RecyclerView?
Если твой RelativeLayouts
установлены на фиксированную ширину и высоту, то есть на размер экрана, который вы можете получить из DisplayMatrics
, это будет хорошо.
Ссылка: Получить ширину и высоту экрана
Если содержимое ваших RelativeLayouts отличается, то вы можете использовать getItemViewType()
метод.
Пожалуйста, смотрите: Как создать RecyclerView с несколькими типами просмотра?
Удачного кодирования:-)