2013-05-03 1 views
10

Ich spiele mit der Option measureWithLargestChild="true". Ich verstehe nicht, warum mein Layout total zusammenbricht, wenn einer meiner Buttons einen zu großen Text enthält. Ich denke, es sollte die Grundgröße von 1/3 beibehalten, aber sie werden um 1/6 kleiner. Warum das?Understanding measureWithLargestChild: Warum bricht das Layout?

Hier können Sie sehen, einige Screenshots:

Button layout bug

Hier ist meine 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> 

Antwort

6

Ich glaube, dies ein Fehler in Maß-Algorithmus ist. Es gibt folgenden Kommentar in LinearLayout.measureHorizontal(int, int) Methode.

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

Es sagt, wird der Algorithmus Artikel mit weight schrumpfen, wenn es für sie nicht genügend Platz vorhanden ist. Da measureWithLargestChild auf true eingestellt ist, haben alle Elemente die gleiche Breite wie das Element ganz links. Jetzt passen sie alle nicht mehr in die Breite der Eltern. So werden sie schrumpfen. Wenn es keinen Fehler gibt, haben alle Elemente danach die gleiche Breite. Aber aufgrund des Fehlers, schrumpft Algorithmus ursprünglichen (wrap_content) Breiten anstelle von Breiten berechnet nach measureWithLargestChild Attribut. Deshalb wurden zwei Gegenstände auf der rechten Seite kleiner.

+0

Kann jemand bitte erklären, warum es in Fall 2 geschrumpft ist (von 4 Fällen). Wie kommt es, dass in diesem Fall kein Platz zur Verfügung steht? – Diffy