soporte - relativelayout android studio español
RelativeLayout está tomando pantalla completa para wrap_content (6)
Buenas respuestas Ahora bien, si no tienes layout_alignParentBottom="true"
y sigues teniendo este problema, ten cuidado con android:background="@drawable/bkgnd"
donde bkgnd es un problema.
¿Por qué FOOBARZ se distribuye completamente en la parte inferior cuando no hay elementos layout_height="fill_parent"
en otras palabras, todos los elementos son wrap_content para la altura?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/feed_u"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="5dip"
android:scaleType="centerCrop"
android:drawableTop="@android:drawable/presence_online"
android:text="U" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/feed_u">
<ImageView
android:id="@+id/feed_h"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_minus" />
<ImageView
android:id="@+id/feed_ha"
android:layout_toLeftOf="@id/feed_h"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_plus" />
<TextView
android:id="@+id/feed_t"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title">
</TextView>
<TextView
android:id="@+id/feed_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Band"
android:layout_below="@id/feed_t">
</TextView>
<TextView
android:id="@+id/feed_s"
android:layout_below="@id/feed_a"
android:text="S"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TextView>
<TextView
android:id="@+id/feed_tm"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="FOOBARZ"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TextView>
</RelativeLayout>
</RelativeLayout>
Del documento RelativeLayout
:
Descripción de la clase
Un diseño donde las posiciones de los niños se pueden describir en relación entre sí o con el padre.
Tenga en cuenta que no puede tener una dependencia circular entre el tamaño de RelativeLayout y la posición de sus hijos. Por ejemplo, no puede tener un RelativeLayout cuya altura esté configurada en WRAP_CONTENT y un elemento secundario configurado en ALIGN_PARENT_BOTTOM
Cuál es exactamente tu caso. RelativeLayout no puede hacer eso.
Ha establecido RelativeLayout en "wrap_content"
y TextView en android:layout_alignParentBottom="true"
, por lo que automáticamente intenta estirar RelativeLayout hacia la parte inferior. No use tales dependencias con el diseño relativo, ya que puede contar como "dependencias circulares".
De los documentos para RelativeLayout :
Tenga en cuenta que no puede tener una dependencia circular entre el tamaño de RelativeLayout y la posición de sus hijos. Por ejemplo, no puede tener un RelativeLayout cuya altura esté configurada en
WRAP_CONTENT
y un elemento secundario configurado enALIGN_PARENT_BOTTOM
.
Intenta alinear tu TextView con algo que no sea RelativeLayout padre, pero ten cuidado también con este problema:
Dependencias circulares, necesita ayuda con el código exacto
Alternativamente, intente agregar diseños internos más sofisticados.
No estoy seguro de por qué la forma clara y obvia de lograr esto no se ha publicado todavía. Esta solución de rendimiento funciona para cualquier View MyView con una altura conocida.
Envuelva su RelativeLayout
con la altura wrap_content
en FrameLayout:
<!-- width here should constrain RelativeLayout -->
<FrameLayout
android:layout_width="@dimen/my_layout_width"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<MyView
...
android:layout_gravity="bottom" />
</FrameLayout>
Solo tenga en cuenta que la vista en la parte inferior de FrameLayout estará encima de su contenido RelativeLayout
, por lo que deberá agregar relleno al final de ese diseño para acomodarlo. Si desea que la vista sea de altura variable, puede Subclase FrameLayout para agregar relleno en el código según la altura de vista medida, o simplemente cambie FrameLayout a LinearLayout vertical si no está preocupado por el rendimiento, es decir, no es una lista artículo, o las vistas son relativamente livianas.
No utilice las propiedades de tipo alight_Parent con las vistas secundarias
Puede usar el diseño de cuadros en lugar de RelativeLayout con la gravedad respectiva
<FrameLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<TextView
android:layout_gravity="bottom|right"
android:text="Hello "
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TextView>
</FrameLayout>
Para aquellos que buscan una solución a esto, como yo lo hice, puedes usar FrameLayout
lugar de RelativeLayout
.
Luego puede establecer la gravedad del objeto deseado en la parte inferior derecha como se muestra a continuación
<TextView
android:layout_gravity="bottom|right"
android:text="FOOBARZ"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TextView>