Android: Jak sprawić, by wszystkie elementy w LinearLayout miały taki sam rozmiar?

80

Chciałbym utworzyć okno dialogowe do wyświetlania tytułu i tagów wideo. Poniżej tekstu chciałbym dodać przyciski Wyświetl, Edytuj i Usuń oraz nadać tym elementom taki sam rozmiar. Czy ktoś wie, jak zmodyfikować plik układu .xml, aby elementy wewnątrz LinearView miały ten sam rozmiar?

Bieżący plik układu wygląda następująco:

<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>

Byłbym wdzięczny, gdyby ktoś mógł pokazać rozwiązanie, modyfikując zawartość wklejonego pliku.

Dzięki!

Niko Gamulin
źródło

Odpowiedzi:

173

Posługiwać się android:layout_width="0px" i android:layout_weight="1"na trzy Buttonsekundy. Oznacza to, że przyciski nie powinny zajmować więcej niż 0 pikseli, ale wszystkie trzy z nich powinny rozdzielać dodatkową przestrzeń między nimi. To powinno dać ci pożądany efekt wizualny.

CommonsWare
źródło
4
Jeśli NAPRAWDĘ chcesz, możesz alternatywnie użyć TableLayout z android: stretchColumns = "0,1,2".
Jeremy Logan
Niesamowite ... więc to znaczy, że jeśli ustawimy szerokość na 0px, waga nadpisuje ustawienia? Dlaczego tak się dzieje?
noob
To nie działa, jeśli twoje przyciski są w formacie GridLayout. W tym przypadku naprawdę stają się 0pxszerokie. Może GridLayoutnie akceptuje layout_weight?
Zelphir Kaltstahl
@Zelphir: GridLayoutzdecydowanie nie używa layout_weight. To jest używane tylko przez LinearLayout, a być może niektóre podklasy LinearLayout.
CommonsWare
33

Innym sposobem jest zrobienie android:layout_width="fill_parent"i android:layout_weight="1"to też będzie działało !!!

Eby
źródło
19
Byłaś naprawdę podekscytowana tą odpowiedzią. :-) Uwielbiam entuzjazm!
Oh Danny Boy,
Rozwiązanie CommonsWare nie działało dla mnie, ale to się udało! :) Użyłem „match_parent”, ponieważ słyszałem, że powinieneś go preferować zamiast „fill_parent”, ale oba działają.
codepleb
LinearLayout rodzic z tych elementów musi mieć również layout_width = „match_parent” .
Patapoom
19

Użyj LinearLayout z żądaną wagą i stwórz elementy o jednakowym layoucie_wagi . Oto przykład ...

<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>

Tak więc suma wag wszystkich elementów wynosi 5. Oto zrzut ekranu ...

wprowadź opis obrazu tutaj

Pamiętaj, że używane są ikony Google Material Design . Mam nadzieję, że to jest pomocne.

Madan Sapkota
źródło