Lineares Layout und Gewicht in Android

In den Android-Dokumentationen habe ich immer über diesen lustigen Gewichtswert gelesen. Jetzt möchte ich es zum ersten Mal ausprobieren, aber es funktioniert überhaupt nicht.

Wie ich es aus den Dokumentationen dieses Layouts verstehe:

 

sollte zwei Schaltflächen erstellen, die horizontal ausgerichtet sind und den Speicherplatz gleichmäßig teilen. Das Problem ist, dass die zwei Knöpfe nicht wachsen, um den Raum zu füllen.

Ich möchte, dass die Knöpfe wachsen und die ganze Linie ausfüllen. Wenn beide Schaltflächen so eingestellt sind, dass sie nur dem übergeordneten Element entsprechen, wird die erste Schaltfläche angezeigt und füllt die gesamte Zeile aus.

Sie layout_weight Eigenschaft layout_weight nicht layout_weight . Ihr Code liest weight="1" und sollte android:layout_weight="1" lesen android:layout_weight="1" .

3 Dinge zu erinnern:

  • Setze die android: layout_width der Kinder auf “0dp”
  • setze das android: weightSum des Elternteils ( edit: wie Jason Moore bemerkte, ist dieses Attribut optional, weil es standardmäßig auf die layout_weight Summe der Kinder gesetzt ist)
  • setze das android: layout_weight jedes Kindes proportional (zB weightSum = “5”, drei Kinder: layout_weight = “1”, layout_weight = “3”, layout_weight = “1”)

Beispiel:

       

Und das Ergebnis:

Layout Gewicht Beispiel

Es ist android:layout_weight . Gewicht kann nur in LinearLayout . Wenn die Ausrichtung von linearlayout Vertikal ist, dann benutze android:layout_height="0dp" und wenn die Ausrichtung horizontal ist, dann benutze android:layout_width = "0dp" . Es wird perfekt funktionieren.

Dieses Bild fasst das lineare Layout zusammen.

Lineares Layout und Gewicht

Sie können diesem Link folgen, um weitere Informationen zu diesem Thema zu erhalten. Just Maths – Ansichten, Gruppen und Layouts anzeigen

Video-Tutorial für lineares Layout: Breite, Höhe und Gewichte

Android Lineares Layout-Tutorial

Versuchen Sie, die layout_width beider Schaltflächen auf “0dip” und das weight beider Schaltflächen auf 0.5

LinearLayout unterstützt die Zuweisung einer Gewichtung für einzelne untergeordnete Elemente. Dieses Attribut weist einer Ansicht einen ” Wichtigkeits ” -Wert zu und ermöglicht das Erweitern, um verbleibenden Platz in der übergeordneten Ansicht auszufüllen. Standardgewicht ist Null

Berechnung, um verbleibenden / zusätzlichen Raum zwischen Kind zuweisen. (nicht der Gesamtplatz)

space assign to child = (Kind individuelles Gewicht) / (Summe des Gewichts jedes Kindes im linearen Layout)

Beispiel (1): Wenn es drei Textfelder gibt und zwei von ihnen ein Gewicht von 1 deklarieren, während das dritte kein Gewicht erhält (0), dann wird verbleibender / zusätzlicher Raum zugewiesen

 1st text box = 1/(1+1+0) 2nd text box = 1/(1+1+0) 3rd text box = 0/(1+1+0) 

Beispiel (2) : Nehmen wir an, wir haben eine Textbeschriftung und zwei Textbearbeitungselemente in einer horizontalen Reihe. Für das Label ist keine layout_weight angegeben, sodass es den zum Rendern erforderlichen Mindestspeicherplatz einnimmt. Wenn die layout_weight für jedes der beiden Textbearbeitungselemente auf 1 gesetzt ist, wird die verbleibende Breite im übergeordneten Layout gleichmäßig aufgeteilt (weil wir behaupten, dass sie gleichermaßen wichtig sind).

 calculation : 1st label = 0/(0+1+1) 2nd text box = 1/(0+1+1) 3rd text box = 1/(0+1+1) 

Wenn das erste Textfeld ein layout_weight von 1 und das zweite Textfeld ein layout_weight von 2 hat, wird ein Drittel des verbleibenden Speicherplatzes dem ersten und zwei Drittel dem zweiten zugewiesen (weil wir behaupten, dass der zweite Platz ist) wichtiger).

 calculation : 1st label = 0/(0+1+2) 2nd text box = 1/(0+1+2) 3rd text box = 2/(0+1+2) 

Ersetzen Sie im Feld Breite der Schaltfläche wrap-content durch 0dp .
Verwenden Sie das Attribut layout_weight einer Sicht.

 android:layout_width="0dp" 

So sieht Ihr Code aus:

     

layout_weight wird verwendet, um den verbleibenden Raum in Proportionen zu verteilen. In diesem Fall nehmen die beiden Tasten die Breite “0dp” an. Der verbleibende Platz wird also in 1: 1-Anteile aufgeteilt, dh der Platz wird gleichmäßig auf die Button-Ansichten aufgeteilt.

Wie die Antwort von @Manoj Seelan

Ersetzen Sie android:layout_weight Mit android:weight .

Wenn Sie Gewicht mit LinearLayout . Sie müssen in LinearLayout hinzufügen, und je nach Ausrichtung Ihres LinearLayout müssen Sie 0dp für Width / Height auf alle LinearLayout Children-Ansichten setzen

Beispiel:

Wenn die Ausrichtung von Linearlayout Vertical , Linearlayout Sie die Breite aller LinearLayout Children-Ansichten mit 0dp

      

Wenn die Ausrichtung Linearlayout von horizontal , Linearlayout Sie die Höhe aller LinearLayout Children-Ansichten mit 0dp .

      

Wenn Sie die beiden Eigenschaften layout_width der Schaltflächen auf “fill_parent” setzen, ist es vielleicht sinnvoll.

Ich habe gerade diesen Code getestet und es funktioniert im Emulator:

     

Stellen Sie sicher, dass layout_width auf beiden Schaltflächen auf “fill_parent” eingestellt ist.

     

Setzen Sie in der obigen XML- android:layout_weight den android:layout_weight des linearen Layouts auf 2 : android:layout_weight="2"

Außerdem müssen Sie dieses android:layout_width="0dp" hinzufügen android:layout_width="0dp" für Kinderansichten [Button Ansichten] von LinerLayout

       

Du musst so schreiben, dass es für mich arbeitet

    

Dies ist die perfekte Antwort auf Ihr Problem

      

Ersetzen Sie wrap_content mit fill_parent .

          

Bildbeschreibung hier eingeben

Im Folgenden finden Sie die Änderungen (in BOLD markiert) in Ihrem Code:

   //changes made here  //changes made here  

Da Ihr LinearLayout horizontal orientiert ist, müssen Sie Ihre Breite nur auf 0dp beschränken. für die Verwendung von Gewichten in dieser Richtung. (Wenn Ihre Ausrichtung vertikal wäre, hätten Sie Ihre Höhe nur 0dp beibehalten) .

Da es zwei Ansichten gibt und Sie android:layout_weight="1" für beide Ansichten platziert haben, bedeutet dies, dass die beiden Ansichten in horizontaler Richtung (oder nach Breite) gleichmäßig aufgeteilt werden.