Android: ¿Cómo hacer que todos los elementos dentro de LinearLayout tengan el mismo tamaño?

80

Me gustaría crear un cuadro de diálogo para mostrar el título y las etiquetas de un video. Debajo del texto me gustaría agregar botones Ver, Editar y Eliminar y hacer que estos elementos tengan el mismo tamaño. ¿Alguien sabe cómo modificar el archivo de diseño .xml para hacer que los elementos dentro de LinearView tengan el mismo tamaño?

El archivo de diseño actual se ve así:

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

Agradecería que alguien pudiera mostrar la solución modificando el contenido del archivo pegado.

¡Gracias!

Niko Gamulin
fuente

Respuestas:

172

Utilice android:layout_width="0px"y android:layout_weight="1"en los tres Buttons. Eso dice que los botones no deberían ocupar más de 0 píxeles, pero los tres deberían dividir cualquier espacio extra entre ellos. Eso debería darte el efecto visual que deseas.

CommonsWare
fuente
4
Si REALMENTE quisiera, podría usar alternativamente un TableLayout con android: stretchColumns = "0,1,2".
Jeremy Logan
Impresionante ... entonces esto significa que, si ponemos el ancho como 0px, ¿el peso anulará la configuración? ¿Por que es esto entonces?
novato
Esto no funciona si sus botones están en formato GridLayout. En este caso, realmente se 0pxensanchan. ¿Quizás GridLayoutno acepta layout_weight?
Zelphir Kaltstahl
@Zelphir: GridLayoutdefinitivamente no lo usa layout_weight. Eso solo lo usa LinearLayout, y quizás algunas subclases de LinearLayout.
CommonsWare
33

¡Otra forma es hacer android:layout_width="fill_parent"y android:layout_weight="1"esto también funcionará bien!

Eby
fuente
18
Estabas muy emocionado con esta respuesta. :-) ¡Amo el entusiasmo!
Oh Danny Boy
La solución de CommonsWare no funcionó para mí, ¡pero esto lo hizo! :) Usé "match_parent" ya que escuché que deberías preferirlo a "fill_parent", pero ambos funcionan.
codepleb
El padre LinearLayout de esos elementos también debe tener layout_width = "match_parent" .
Patapoom
19

Use LinearLayout con su weightSum deseado y cree elementos con el mismo layout_weight . Aquí hay un ejemplo ...

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

Entonces, la suma de peso de todos los elementos es 5. Aquí está la captura de pantalla ...

ingrese la descripción de la imagen aquí

Tenga en cuenta que se utilizan los iconos de Google Material Design . Espero que esto sea útil.

Madan Sapkota
fuente