Android: Як зробити всі елементи всередині LinearLayout однаковими за розміром?


80

Я хотів би створити діалогове вікно для відображення назви відео та тегів. Під текстом я хотів би додати кнопки Перегляд, Редагувати та Видалити та зробити ці елементи однаковими за розміром. Хтось знає, як змінити файл макета .xml, щоб зробити елементи всередині LinearView однакового розміру?

Поточний файл макета виглядає так:

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

Буду вдячний, якщо хтось зможе показати рішення, змінивши вміст вставленого файлу.

Дякую!

Відповіді:


173

Використовуйте android:layout_width="0px"і android:layout_weight="1"на три Buttons. Це означає, що кнопки повинні займати не більше 0 пікселів, але три з них повинні розділити зайвий простір між ними. Це має дати вам бажаний візуальний ефект.


4
Якщо ви ДЕЙСТВІРНО хотіли, ви можете використати TableLayout з android: stretchColumns = "0,1,2".
Джеремі Логан

Чудово ... отже, це означає, що якщо ми встановимо ширину як 0px, вага замінить налаштування? Чому це так?
noob

Це не працює, якщо ваші кнопки розташовані в GridLayout. У цьому випадку вони дійсно стають 0pxширокими. Може GridLayout, не приймає layout_weight?
Зельфір Кальцталь

@Zelphir: GridLayoutточно не використовує layout_weight. Це використовується лише LinearLayout, і, можливо, деякими підкласами LinearLayout.
CommonsWare

33

Інший спосіб - це зробити, android:layout_width="fill_parent"і android:layout_weight="1"ця воля також прекрасно працює !!!


19
Ви були дуже раді цій відповіді. :-) Любіть ентузіазм!
О, Денні Хлопчик,

Рішення CommonsWare для мене не спрацювало, але це вдалося! :) Я використовував "match_parent", оскільки чув, що вам слід віддавати перевагу йому перед "fill_parent", але обидва працюють.
codepleb

LinearLayout батько цих елементів повинні бути також layout_width = «match_parent» .
Patapoom

19

Використовуйте LinearLayout із вашою бажаною вагою і створіть елементи з однаковою вагою layout_weight . Ось приклад ...

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

Отже, вагова сума всіх елементів дорівнює 5. Ось знімок екрана ...

введіть тут опис зображення

Зверніть увагу, що використовуються значки Google Material Design . Сподіваюся, це корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.