tag studio log example android android-layout

studio - log android



Peso relativo relativo (4)

En un recurso XML de diseño, tengo 3 RelativeLayout (s) que están dentro de un RelativeLayout principal. La vista se mostrará verticalmente. Estos 3 RelativeLayout () se establecen uno al lado del otro, y quiero que llenen toda la pantalla, no importa cuál sea el tamaño de la pantalla. Mi, vista de diseño:

<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>

Puse weight=1 y layout_width=0dp para cada relativoLayout y esta técnica funciona con botones, pensé que lo mismo ocurrirá con relativeLayout, parece que mis pensamientos estaban equivocados. ¿Alguna idea?

UPD1: He añadido una imagen de lo que me gustaría tener


La solución es muy simple. He estado buscando la distribución del peso en el diseño relativo.

Es un pequeño truco para todas estas situaciones amables.

Usa LinearLayout con android: orientación = "horizontal"


Puede usar LinearLayout Manager orientado LinearLayout Manager en la Recycler View del Recycler View , y colocar cada RelativeLayout en cada elemento, de su Adapter .

El enlace: ¿Cómo construir un ListView horizontal con RecyclerView?

Si sus RelativeLayouts se configuran a un ancho y alto fijos, es decir, al tamaño de la Pantalla, que puede obtener de DisplayMatrics , eso estará bien.

El enlace: Obtener ancho y alto de pantalla

Si los contenidos de sus RelativeLayouts son diferentes, entonces puede usar el método getItemViewType() .

Por favor vea: ¿Cómo crear RecyclerView con múltiples vistas?

Codificación feliz :-)


RelativeLayouts no son compatibles con el peso. Debe usar un LinearLayout como contenedor principal si desea usar pesos.


RelativeLayout no presta atención a android:layout_weight . (Esa es una propiedad de LinearLayout.LayoutParams , pero no de RelativeLayout.LayoutParams .)

Debería poder obtener el diseño que desea con una jerarquía de vista mucho más simple. No está claro qué intenta hacer, ya que los dos últimos RelativeLayout Referencia están vacíos. Si necesita una organización puramente vertical, sugeriría usar LinearLayout lugar de RelativeLayout .

EDITAR Según su edición, parece que desea un diseño horizontal de tres vistas compuestas, cada una de las cuales se puede hacer clic. Creo que algo como lo siguiente funcionará:

<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>

Si el contenido de los botones no es correcto, puede reemplazar las vistas de LinearLayout segundo nivel con RelativeLayout si eso ayuda a organizar mejor el diseño.