Android: Wie werden alle Elemente in LinearLayout gleich groß?

80

Ich möchte einen Dialog erstellen, um einen Videotitel und Tags anzuzeigen. Unterhalb des Textes möchte ich die Schaltflächen Anzeigen, Bearbeiten und Löschen hinzufügen und diese Elemente auf die gleiche Größe bringen. Weiß jemand, wie man eine XML-Layoutdatei ändert, um Elemente in LinearView gleich groß zu machen?

Die aktuelle Layoutdatei sieht folgendermaßen aus:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="vertical">

    <LinearLayout 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:orientation="vertical">

          <TextView 
              android:layout_width="wrap_content" 
              android:layout_height="wrap_content" 
              android:id="@+id/txtTitle" android:text="[Title]" >
          </TextView>

          <TextView 
              android:layout_width="wrap_content"
              android:layout_height="wrap_content" 
              android:id="@+id/txtTags"            
              android:text="[Tags]" >
          </TextView>

    </LinearLayout>

    <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal">

        <Button 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:id="@+id/btnPlay" 
           android:text="View">
        </Button>

        <Button 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:id="@+id/btnEdit" 
            android:text="Edit">
        </Button>

        <Button 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:id="@+id/btnDelete" 
            android:text="Delete">
        </Button>

    </LinearLayout>

</LinearLayout>

Ich würde mich freuen, wenn jemand die Lösung durch Ändern des eingefügten Dateiinhalts zeigen könnte.

Vielen Dank!

Niko Gamulin
quelle

Antworten:

172

Verwenden Sie android:layout_width="0px"und android:layout_weight="1"auf den drei Buttons. Das heißt, die Schaltflächen sollten nicht mehr als 0 Pixel einnehmen, aber die drei sollten zusätzlichen Platz zwischen ihnen aufteilen. Das sollte Ihnen den gewünschten visuellen Effekt geben.

CommonsWare
quelle
4
Wenn Sie WIRKLICH wollten, können Sie alternativ ein TableLayout mit Android verwenden: stripColumns = "0,1,2".
Jeremy Logan
Genial ... das heißt, wenn wir die Breite auf 0px setzen, überschreibt das Gewicht die Einstellungen? Wieso ist es so?
Noob
Dies funktioniert nicht, wenn sich Ihre Schaltflächen in a befinden GridLayout. In diesem Fall werden sie wirklich 0pxbreit. Vielleicht GridLayoutnicht akzeptieren layout_weight?
Zelphir Kaltstahl
@ Zelphir: GridLayoutdefinitiv nicht verwendet layout_weight. Das wird nur von LinearLayoutund vielleicht einigen Unterklassen von verwendet LinearLayout.
CommonsWare
33

Ein anderer Weg ist zu machen android:layout_width="fill_parent"und android:layout_weight="1"das wird auch gut funktionieren !!!

Eby
quelle
18
Sie waren sehr aufgeregt über diese Antwort. :-) Liebe die Begeisterung!
Oh Danny Boy
Die Lösung von CommonsWare hat bei mir nicht funktioniert, aber das hat es geschafft! :) Ich habe "match_parent" verwendet, da ich gehört habe, dass Sie es "fill_parent" vorziehen sollten, aber beide funktionieren.
Codepleb
Das übergeordnete LinearLayout dieser Elemente muss außerdem layout_width = "match_parent" haben .
Patapoom
18

Verwenden Sie LinearLayout mit Ihrer gewünschten weightSum und erstellen Sie Elemente mit gleichem layout_weight . Hier ist ein Beispiel ...

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_share_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_search_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_event_note_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_brush_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_menu_white_36dp"/>
</LinearLayout>

Die Gewichtssumme aller Elemente beträgt also 5. Hier ist der Screenshot ...

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass Google Material Design- Symbole verwendet werden. Hoffe das ist hilfreich.

Madan Sapkota
quelle