Warum Android: layout_width="0px" für Fragmente?

8

Die Layoutbreite ist in Fragmentbeispielen immer Null. Was steckt hinter diesem Wert?

    
Eugene 10.09.2011, 07:56
quelle

2 Antworten

31

Um es hoffentlich zu erklären, werfen Sie einen Blick auf die Design-Philosophie für Fragmente in der Dev Guide.

Wenn Sie sich das Bild ansehen, zeigt es auf der linken Seite, wie ein Telefon eine ursprüngliche Aktivität A anzeigen würde, die dann Aktivität B startet, wenn ein Element in einer Liste ausgewählt wird.

Auf der rechten Seite wird jedoch gezeigt, wie diese beiden Aktivitäten gleichzeitig als Fragmente angezeigt werden können. Hinweis Fragment A nimmt 1/3 des Bildschirms und Fragment B füllt 2/3 des Bildschirms.

Sehen Sie sich nun das XML für dieses Layout an Hinzufügen eines Fragments zu einer Aktivität aus dem gleichen Dev Guide Artikel ...

%Vor%

Sie können sehen, dass beide Fragmente einen layout_width von 0dp haben, aber sie haben auch jeweils ein layout_weight -Attribut. Der erste hat ein Gewicht von 1 und der zweite ein Gewicht von 2.

Kurz gesagt, wenn Sie ein solches Layout verwenden, bedeutet das Festlegen der 'Breite' auf 0, dass Sie keine Breite explizit erzwingen wollen und dass das Betriebssystem die relativen Breiten als Bruchteile des Gesamtgewichts berechnen soll. Mit anderen Worten 1 + 2 = 3 (Gesamtgewicht), aber die erste Aktivität möchte eine Breite von 1 / Gesamtgewicht = 1/3 der Bildschirmbreite und Fragment B möchte 2 / Gesamtbreite = 2/3 der Bildschirmbreite.

Angenommen, Sie fügen ein drittes Fragment hinzu, das ebenfalls die Breite = 0dp und das Gewicht = 2 hat. In diesem Fall ist das Gesamtgewicht 1 + 2 + 2 = 5 und das erste Fragment hat eine relative Breite von 1/5 und die anderen zwei Fragmente 2/5 des Bildschirms oder 20% / 40% / 40% / p>     

Squonk 10.09.2011, 09:16
quelle
0

Das hat bei mir funktioniert:

  1. Summiere alle Gewichte im Layout. In dem Beispiel, das Squonk gepostet hat, gibt es 2 Fragmente und das Gesamtgewicht ist 3.

  2. Das Fragment ArticleListFragment hat eine Gewichtung = 1, was bedeutet, dass das Größe ist 1/3 (3 ist das Gesamtgewicht) des Bildschirms.

  3. Das Fragment ArticleReaderFragment hat eine Gewichtung = 2, was bedeutet, dass die Größe 2/3 des Zeichens beträgt.

Ich hoffe, es hilft.

    
piskunov 01.06.2015 20:43
quelle