Match_parent propiedad para los niños en un RelativeLayout

En resumen, ¿es posible decirle a un niño en un RelativeLayout que siempre coincida con la altura de ese RelativeLayout sin importar cómo se comporten otros niños en ese mismo RelativeLayout ? En resumen, eso es todo. Detalles abajo.

Lo que estoy tratando de lograr es una fila ListView con al menos tres vistas, y una de esas vistas sería una especie de raya en el lado derecho de la entrada de la lista (la vista roja a continuación). El problema que estoy teniendo es que hay un TextView en el lado izquierdo, y depediendo en cuánto texto tengo, la raya no llenará la disposición entera. Esto es muy claramente explicado por las imágenes de abajo.

Disposición del elemento ListView :

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <View android:id="@+id/bottom_line" android:layout_width="match_parent" android:layout_height="5dp" android:layout_alignParentBottom="true" android:background="#fc0" /> <!-- Why match_parent does not work in view below? --> <View android:id="@+id/stripe" android:layout_width="80dp" android:layout_height="wrap_content" android:minHeight="50dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:background="#f00" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/stripe" android:text="This is a very long line, meant to completely break the match_parent property of the box at right" style="?android:textAppearanceLarge"/> </RelativeLayout> 

Resultado:

RelativeLayout con el niño que no llena la disposición entera verticalmente

El ajuste de la altura de la raya y la raíz a match_parent no hace ninguna diferencia. Lo hice.

Repitiendo la pregunta, quiero que la franja roja siempre llene al padre verticalmente. Usted puede ver que la raya no está alineando a la tapa de la raíz.

Una nota: el ejemplo anterior es el ejemplo más simple y autónomo que puedo imaginar. Es sólo una ListActivity con un ArrayAdapter anónimo poblado por una matriz de String estática. El código relevante en onCreate es como máximo 8 líneas, por lo que no hay preocupaciones allí. Es realmente el diseño. Además, tengo este trabajo con anidados LinearLayout s ya, pero estoy tratando de reducir la profundidad de mi estructura de diseño un poco, si es posible. LinearLayout funciona bien, como se esperaba.

Tenía el mismo requisito y mi solución era alinear la parte superior de la franja roja con la parte superior del padre y la parte inferior de la raya con la parte inferior de la vista de texto a la izquierda. La altura en este caso se vuelve irrelevante. Puede utilizar wrap_content o match_parent .

Simplemente coloque su RelativeLayout principal dentro de un LinearLayout , entonces el cálculo de la altura de Views hijo será correcto. Tuve el mismo problema y funcionó para mí.

Prueba esto:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <View android:id="@+id/stripe" android:layout_width="80dp" android:layout_height="match_parent" android:layout_alignBottom="@id/text" android:layout_alignParentRight="true" android:layout_alignTop="@id/text" android:background="#f00" android:minHeight="50dp"/> <TextView android:id="@+id/text" style="?android:textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/stripe" android:text="This is a very long line, meant to completely break the match_parent property of the box at right"/> <View android:id="@+id/bottom_line" android:layout_width="match_parent" android:layout_height="5dp" android:layout_below="@id/text" android:background="#fc0"/> </RelativeLayout> 

La alineación superior e inferior de la vista en rojo es la misma que textview ahora.

Es un problema molesto y usted necesita poner el RelativeLayout dentro de un LinearLayout

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:minHeight="40dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/deleteItem" android:layout_width="60dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:clickable="true" android:background="@color/background_grey" > <TextView style="@style/SmallButtonFont" android:layout_marginRight="12dp" android:layout_centerInParent="true" android:text="CLEAR" android:textColor="@color/globalRedLight" /> </RelativeLayout> </RelativeLayout> </LinearLayout> 

Agregue el listener al sostenedor del artículo de la lista así que cada vez que la altura del cambio del portador, fija esa altura a un niño. i1 es para la parte superior, e i3 es para la parte inferior.

 parent.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) { child.setTop(i1); child.setBottom(i3); } }); 
  • Cómo mostrar un botón en la posición de pantalla aleatoria
  • Cómo rellenar el espacio entre dos vistas dentro de un RelativeLayout
  • TextViews en la parte superior e inferior, el espacio restante lleno de ListView
  • Coloque cuatro diseños relativos igual en la pantalla
  • Equivalente de RelativeLayout en Flutter
  • RelativeLayout "No se pudo resolver el recurso ..." Android
  • No se puede cambiar el tamaño de RelativeLayout dentro de ScrollView para llenar toda la pantalla
  • Androide - superponer imágenes (jugar a las cartas)
  • Especifique Layout Margen superior para la barra de acción de superposición
  • Establecimiento de subvases en un diseño mediante programación
  • Layout_below elemento dentro del diseño incluido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.