Ich verstehe nicht, wie ich dieses Attribut verwenden soll. Kann mir jemand mehr darüber erzählen?
648
Ich verstehe nicht, wie ich dieses Attribut verwenden soll. Kann mir jemand mehr darüber erzählen?
Mit können layout_weight
Sie ein Größenverhältnis zwischen mehreren Ansichten festlegen. ZB haben Sie ein MapView
und ein, table
das einige zusätzliche Informationen zur Karte anzeigen sollte. Die Karte sollte 3/4 des Bildschirms verwenden und die Tabelle sollte 1/4 des Bildschirms verwenden. Dann setzen Sie die layout_weight
von der map
auf 3 und die layout_weight
von der table
auf 1.
Damit es funktioniert, müssen Sie auch die Höhe oder Breite (abhängig von Ihrer Ausrichtung) auf 0px einstellen.
Kurz gesagt,
layout_weight
gibt an, wie viel zusätzlicher Speicherplatz im Layout der Ansicht zugewiesen werden soll.LinearLayout unterstützt das Zuweisen eines Gewichts zu einzelnen Kindern. Dieses Attribut weist einer Ansicht einen "Wichtigkeits" -Wert zu und ermöglicht das Erweitern, um den verbleibenden Platz in der übergeordneten Ansicht zu füllen. Das Standardgewicht von Ansichten ist Null.
Berechnung, um den verbleibenden Platz zwischen den Kindern zuzuweisen
Im Allgemeinen lautet die Formel:
Beispiel 1
Wenn drei Textfelder vorhanden sind und zwei davon eine Gewichtung von 1 deklarieren, während das dritte keine Gewichtung (0) erhält, wird der verbleibende Platz wie folgt zugewiesen:
Beispiel 2
Angenommen, wir haben eine Textbeschriftung und zwei Textbearbeitungselemente in einer horizontalen Zeile. Das Etikett ist nicht
layout_weight
angegeben, daher nimmt es den zum Rendern erforderlichen Mindestspeicherplatz ein. Wennlayout_weight
jedes der beiden Textbearbeitungselemente auf 1 gesetzt ist, wird die verbleibende Breite im übergeordneten Layout gleichmäßig zwischen ihnen aufgeteilt (da wir behaupten, dass sie gleich wichtig sind).Berechnung:
Wenn stattdessen das erste Textfeld eine
layout_weight
1 und das zweite einelayout_weight
2 hat, wird ein Drittel des verbleibenden Platzes dem ersten und zwei Drittel dem zweiten Platz zugewiesen (weil wir das zweite beanspruchen eins ist wichtiger).Berechnung:
Quellartikel
quelle
android:layout_width="0px"
ist wichtig. Außerdem müssen die Gewichte keine ganzen Zahlen sein.weightSum
dann das Bild? Hat es etwas damit zu tunlayout_weight
?Wenn Sie zu den anderen Antworten hinzufügen, ist es am wichtigsten, die Layoutbreite (oder -höhe) auf 0 Pixel festzulegen
Andernfalls sehen Sie Müll
quelle
Wenn sich mehrere Ansichten über a erstrecken
LinearLayout
, erhaltenlayout_weight
Sie jeweils eine proportionale Größe. Eine Ansicht mit einem größerenlayout_weight
Wert "wiegt" mehr, sodass sie einen größeren Raum erhält.Hier ist ein Bild, um die Dinge klarer zu machen.
Theorie
Der Begriff Layoutgewicht bezieht sich auf das Konzept des gewichteten Durchschnitts in der Mathematik. Es ist wie in einer College-Klasse, in der Hausaufgaben 30% wert sind, die Teilnahme 10% wert ist, die Halbzeit 20% wert ist und das Finale 40% wert ist. Wenn Ihre Punkte für diese Teile zusammen gewichtet werden, erhalten Sie Ihre Gesamtnote.
Dies gilt auch für das Layoutgewicht. Die
Views
in einer HorizontalenLinearLayout
können jeweils einen bestimmten Prozentsatz der Gesamtbreite einnehmen. (Oder ein Prozentsatz der Höhe für eine VertikaleLinearLayout
.)Das Layout
Das
LinearLayout
, was Sie verwenden, sieht ungefähr so aus:Beachten Sie, dass Sie
layout_width="match_parent"
für die verwenden müssenLinearLayout
. Wenn Sie verwendenwrap_content
, wird es nicht funktionieren. Beachten Sie auch, dasslayout_weight
dies für die Ansichten in RelativeLayouts nicht funktioniert (siehe hier und hier für SO-Antworten zu diesem Problem).Die Ansichten
Jede Ansicht in einer Horizontalen
LinearLayout
sieht ungefähr so aus:Beachten Sie, dass Sie
layout_width="0dp"
zusammen mit verwenden müssenlayout_weight="1"
. Das Vergessen verursacht viele neue Benutzerprobleme. (In diesem Artikel finden Sie verschiedene Ergebnisse, die Sie erhalten können, wenn Sie die Breite nicht auf 0 setzen.) Wenn Ihre Ansichten vertikal sindLinearLayout
, würden Sie sielayout_height="0dp"
natürlich verwenden.Im
Button
obigen Beispiel habe ich das Gewicht auf 1 gesetzt, aber Sie können eine beliebige Zahl verwenden. Es ist nur die Summe, die zählt. Sie können in den drei Schaltflächenreihen im ersten Bild, das ich gepostet habe, sehen, dass die Zahlen alle unterschiedlich sind, aber da die Proportionen gleich sind, ändern sich die gewichteten Breiten nicht in jeder Zeile. Einige Leute verwenden gerne Dezimalzahlen mit einer Summe von 1, damit in einem komplexen Layout klar ist, wie schwer jedes Teil ist.Eine letzte Anmerkung. Wenn Sie viele verschachtelte Layouts verwenden
layout_weight
, kann dies die Leistung beeinträchtigen.Extra
Hier ist das XML-Layout für das obere Bild:
quelle
layout_weight
teilt Android mit, wie Sie IhreView
s in einem verteilen könnenLinearLayout
. Android berechnet dann zuerst den Gesamtanteil, der für alleView
s erforderlich ist, für die ein Gewicht angegeben wurde, und platziert jedesView
nach dem Bruchteil des Bildschirms, den es benötigt. Im folgenden Beispiel sieht Android, dass dieTextView
s einlayout_weight
von haben0
(dies ist die Standardeinstellung) und dieEditText
s einlayout_weight
von2
jedem haben, während dasButton
ein Gewicht von hat1
. Android weist also "gerade genug" Platz zum Anzeigen zutvUsername
undtvPassword
teilt dann den Rest der Bildschirmbreite in 5 gleiche Teile auf, von denen zwei zugewiesen sindetUsername
, zweietPassword
und der letzte TeilbLogin
:Es sieht aus wie:
und
quelle
Denken Sie es so, wird einfacher sein
Wenn Sie 3 Schaltflächen haben und deren Gewichtung dementsprechend 1,3,1 beträgt, funktioniert dies wie eine Tabelle in HTML
Geben Sie 5 Portionen für diese Zeile an: 1 Portion für Taste 1, 3 Portionen für Taste 2 und 1 Portion für Taste 1
Betrachten,
quelle
Eine der besten Erklärungen für mich war diese (suchen Sie im Android-Tutorial nach Schritt 7) :
quelle
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight definiert, wie viel Speicherplatz das Steuerelement jeweils für andere Steuerelemente erhalten muss.
quelle
Für zusätzliche:
vertical
Vergessen Sie zur Orientierung nicht,height
auf 0dp zu setzenhorizontal
Vergessen Sie zur Orientierung nicht,width
auf 0dp zu setzenquelle
Bitte sehen Sie sich die weightSum von LinearLayout und das layout_weight jeder Ansicht an. android: weightSum = "4" android: layout_weight = "2" android: layout_weight = "2" Ihre layout_height sind beide 0px, aber ich bin nicht sicher, ob es relevant ist
quelle
Kombinieren Sie beide Antworten aus
Flo & rptwsthi und roetzi,
Denken Sie daran, Ihre zu ändern
layout_width=0dp/px
, sonst dielayout_weight
Verhalten umgekehrt verhält, wenn die größte Zahl den kleinsten Platz und die niedrigste Zahl den größten Platz belegt.Außerdem führt eine Kombination von Gewichten dazu, dass ein Layout nicht angezeigt werden kann (da es den Platz über belegt).
Vorsicht davor.
quelle
Durch Hinzufügen
android:autoSizeTextType="uniform"
wird die Größe des Texts automatisch für Sie geändertquelle
Wie der Name schon sagt, gibt die Layoutgewichtung an, wie viel oder wie viel Prozent des Speicherplatzes ein bestimmtes Feld oder Widget auf dem Bildschirm belegen soll.
Wenn wir das Gewicht in horizontaler Ausrichtung angeben, müssen wir angeben
layout_width = 0px
.Wenn wir das Gewicht in vertikaler Ausrichtung angeben, müssen wir es ebenfalls angeben
layout_height = 0px
.quelle