2013-05-03 16 views
10

Sto giocando con l'opzione measureWithLargestChild="true". Non capisco perché il mio layout si rompa in totale, se uno dei miei pulsanti ha un testo troppo grande su di esso. Penso che dovrebbe mantenere la dimensione di base di 1/3 ma diventano più piccoli di circa 1/6. Perché?Comprensione measureWithLargestChild: Perché si interrompe il layout?

Qui si può vedere alcuni screenshots:

Button layout bug

Ecco il mio xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:baselineAligned="false" 
    android:gravity="center" 
    android:orientation="vertical" > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:baselineAligned="false" 
     android:measureWithLargestChild="true" > 
     <Button 
      style="@style/my_style" 
      android:layout_weight="1" 
      android:text="Button123456" /> 
     <Button 
      style="@style/my_style" 
      android:layout_weight="1" 
      android:text="A" /> 
     <Button 
      style="@style/my_style" 
      android:layout_weight="1" 
      android:text="WW" /> 
    </LinearLayout> 
</LinearLayout> 

risposta

6

Credo che questo è un bug nell'algoritmo misura. Seguono i commenti nel metodo LinearLayout.measureHorizontal(int, int).

// Either expand children with weight to take up available space or 
// shrink them if they extend beyond our current bounds 

Si dice, l'algoritmo si ridurrà oggetti con weight se non c'è abbastanza spazio per loro. Poiché measureWithLargestChild è impostato su true, tutti gli elementi hanno la stessa larghezza dell'elemento più a sinistra. Ora tutti insieme non si adattano più alla larghezza del genitore. Così saranno ridotti. Se non ci fossero errori, tutti gli elementi avrebbero la stessa larghezza in seguito. Ma a causa del bug, l'algoritmo si riduce dimensioni originali (wrap_content) anziché le larghezze calcolate in base all'attributo measureWithLargestChild. Ecco perché due elementi sulla destra sono diventati più piccoli.

+0

Qualcuno può spiegare perché è ridotto nel caso 2 (su 4 casi). Come mai non c'è spazio disponibile in questo caso? – Diffy

Problemi correlati