studio layout_below ejemplos constraint bottom android android-layout android-relativelayout

layout_below - relativelayout android ejemplos



propiedad match_parent para niƱos en un RelativeLayout (5)

Agregue el oyente a la lista del titular del elemento para que cada vez que el titular cambie la altura, establezca esa altura para 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); } });

En resumen, ¿es posible decirle a un niño en un RelativeLayout que siempre coincida con la altura de ese RelativeLayout independientemente de 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 de ListView con al menos tres vistas, y una de esas vistas sería una raya en el lado derecho de la entrada de la lista (la vista roja a continuación). El problema que tengo es que hay un TextView en el lado izquierdo, y dependiendo de la cantidad de texto que tengo, la banda no llenará todo el diseño. Esto se explica muy claramente por las imágenes a continuación.

Diseño de 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:

Establecer la altura de franja y raíz en match_parent no hace ninguna diferencia. Lo hice.

Repitiendo la pregunta, quiero que la franja roja siempre llene el padre verticalmente. Puedes ver que la banda no está alineada con la parte superior de la raíz.

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


Es un problema molesto y debe colocar 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>


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>

Alinear la parte superior e inferior de la vista roja es lo mismo que la vista de texto ahora.


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


Tenía el mismo requisito y mi solución fue alinear la parte superior de la franja roja con la parte superior de los padres y la parte inferior de la banda con la parte inferior de la vista de texto a la izquierda. La altura en este caso se vuelve irrelevante. Puedes usar wrap_content o match_parent .