2012-03-23 11 views
9

lo tanto, tengo este diseño:androide "layout_alignParentBottom" en la disposición relativa

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/layout" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="#FFFF00" 
       android:minHeight="100dp" 
       android:layout_gravity="bottom" 
     > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:textColor="#000000" 
      android:background="#FF0000" 
      android:text="Hello World" 
      /> 

    <Button 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_alignParentRight="true" 
      android:text="button"/> 
</RelativeLayout> 

y así es como se ve:

enter image description here

pero si añado android:layout_alignParentBottom="true" a en el botón es como se ve:

enter image description here

  1. ¿Puede alguien explicarme este comportamiento?
  2. Cómo colocar mi botón en la parte inferior sin cambiar el tamaño del diseño amarillo y sin agregar miles de diseños para soluciones alternativas?
+0

¿Sigue existiendo este error? –

+0

He encontrado este problema en Android 2.2 y 4.0.0, pero creo que esto también sucedió en otras plataformas. –

Respuesta

9

esta solución funcionó para mí

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/layout" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="#FFFF00" 
       android:minHeight="100dp" 
       android:orientation="horizontal" 
       android:layout_gravity="bottom" 
     > 
    <TextView 
      android:id="@+id/tv" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:textColor="#000000" 
      android:background="#FF0000" 
      android:text="Hello World" 
      /> 

    <Button 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_gravity="bottom|right" 
      android:text="button"/> 
</FrameLayout> 
0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="bottom" 
    android:background="#FFFF00" 
    android:minHeight="100dp" > 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:textColor="#000000" 
      android:background="#FF0000" 
      android:text="Hello World"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="button" /> 

</RelativeLayout> 

probar este código

+0

usando tu código. Hace que mi diseño cubra toda la pantalla porque has usado android: layout_height = "fill_parent" y yo ¿Quiere que mi diseño mantenga su altura como se ve en mi primera captura de pantalla –

+0

que no codificará? – Android

+0

por lo que quiero que mi diseño se vea como mi primera imagen, excepto que mi botón debe estar alineado con la parte inferior. –

1

éste rápidamente en una pantalla

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="bottom" 
    android:background="#FFFF00" 
    android:minHeight="100dp" > 



    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="button" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignTop="@+id/button1" 
     android:background="#000000" 
     android:text="TextView" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/button1" 
     android:layout_alignParentLeft="true" 
     android:background="#000000" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:orientation="vertical" > 

    </LinearLayout> 

</RelativeLayout> 
+0

esto no está funcionando porque no tiene en cuenta minHeight del diseño relativo principal –

1

sólo por intentarlo, ¿puede duplicar el tamaño mínimo de su diseño y probarlo de nuevo? o tal vez puede establecer una solución a la altura del diseño y cambiarla dinámicamente del código cuando sea necesario.

0

Lamentablemente, aún existe una falla en las versiones más nuevas de Android.

De todos modos, he encontrado que después puede resolver ese problema:

  1. Eliminar minHeight de RelativeLayout

  2. Insertar Vista de Texto en un LinearLayout:

    <LinearLayout 
        android:id="@+id/tvLayout" 
        android:layout_alignParentTop="true" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:minHeight="100dp" 
        android:gravity="top" 
        > 
        <TextView 
         android:id="@+id/tv" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:background="#FFFF00FF" 
         android:text="Helo" 
         /> 
    </LinearLayout> 
    
  3. layout_alignParentBottom Eliminar del botón y añadir layout_alignBottom = "@ id/tvLayout"

Ahora LinearLayout "controla" la altura de RelativeLayout. Si la altura de TextView es mayor que minHeight de 100dp, se expandirá.

Y el botón siempre alineará su parte inferior a LinearLayout, igual a RelativeLayout uno.

Cuestiones relacionadas