2012-03-23 25 views
9

Così, ho questo layout:Android "layout_alignParentBottom" nel layout relativo

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

e questo è come appare:

enter image description here

ma se aggiungo android:layout_alignParentBottom="true" al pulsante qui è come appare:

enter image description here

  1. Qualcuno può spiegarmi questo comportamento?
  2. Come mettere il mio pulsante in basso senza ridimensionare il layout giallo e senza aggiungere migliaia di layout per soluzioni alternative?
+0

Questo errore esiste ancora? –

+0

Ho riscontrato questo problema su Android 2.2 e 4.0.0 ma penso che questo sia successo anche su altre piattaforme –

risposta

9

questa soluzione ha funzionato per me

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

provare questo codice

+0

usando il tuo codice rende il mio layout per coprire tutto lo schermo perché hai usato Android: layout_height = "fill_parent" e I voglio che il mio layout mantenga la sua altezza come si vede nel mio primo screenshot –

+0

che uno non codificherà? – Android

+0

quindi voglio che il mio layout assomigli alla mia prima immagine, tranne che il mio pulsante dovrebbe essere allineato in basso. –

1

questo veloce uno schermo

<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

questo non funziona perché non tiene conto di minHeight dal layout relativo principale –

1

solo per provare, si può raddoppiare la dimensione min del tuo layout e riprovare? o forse puoi impostare una correzione dell'altezza del layout e cambiarla dinamicamente dal codice quando necessario.

0

Sfortunatamente il bug esiste ancora nelle versioni più recenti di Android.

In ogni caso, ho scoperto che segue può risolvere il problema:

  1. Eliminare MinHeight di RelativeLayout

  2. Inserire TextView in 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. Elimina layout_alignParentBottom da Button e aggiungi layout_alignBottom = "@ id/tvLayout"

Ora LinearLayout "controlla" l'altezza di RelativeLayout. Se l'altezza di TextView è maggiore di minHeight di 100dp, si espanderà.

E il pulsante allinea sempre il suo fondo a LinearLayout, uguale a RelativeLayout.

Problemi correlati