Hacer vistas de la misma altura en LinearLayout cuando todas son wrap_content

Tengo un LinearLayout horizontal con tres vistas dentro de él. Cada uno tiene su layout_width establecido en 0dp, y diferentes pesos establecidos. Todos ellos tienen wrap_content establecido para el layout_height.

El problema que tengo es que cuando uno de ellos se envuelve, los demás ya no llenan la altura completa del LinearLayout (tienen antecedentes, por lo que esto se ve feo).

Quiero hacer que todos ellos llenen cualquier espacio vertical restante en el LinearLayout, al tiempo que también les permite envolver el contenido si es necesario. Básicamente, quiero que todos tengan la altura del hermano más alto.

He intentado establecer el layout_gravity a "fill" y "fill_vertical", pero eso no hace nada.

Aquí hay un ejemplo del diseño:

<LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/background_dark" android:orientation="horizontal" > <Button android:id="@+id/job" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="fill" android:layout_margin="1dp" android:layout_weight="4" android:background="@drawable/btn_bkgnd_dark_grey" android:drawableLeft="@drawable/icon_plus" android:onClick="jobPressed" android:padding="5dp" android:text="Add to Job fgh dfhfg " android:textAppearance="@style/rowitem_notes" android:textColor="@android:color/white" /> <ImageButton android:id="@+id/bookmark" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="fill" android:layout_margin="1dp" android:layout_weight="2" android:background="@drawable/btn_bkgnd_dark_grey" android:onClick="bookmarkPressed" android:padding="5dp" android:src="@drawable/icon_bookmark" /> <Button android:id="@+id/itemDetailsButton" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="fill" android:layout_margin="1dp" android:layout_weight="4" android:background="@drawable/btn_bkgnd_dark_grey" android:drawableRight="@drawable/icon_info" android:onClick="itemDetailsPressed" android:padding="5dp" android:text="Item Details" android:textAppearance="@style/rowitem_notes" android:textColor="@android:color/white" /> </LinearLayout> 

He corregido su diseño. Utilice fill_parent en lugar de ajustar el contenido para las vistas secundarias. He utilizado drawables android por defecto y colores, reemplazar eso con sus drawables y estilos.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout1" style="@android:style/ButtonBar" android:layout_width="fill_parent" android:gravity="center" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/job" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_margin="2dp" android:layout_weight="4" android:background="#33B5E5" android:drawableLeft="@android:drawable/btn_star" android:onClick="jobPressed" android:padding="5dp" android:text="Add to Job fgh" android:textColor="@android:color/white" android:textSize="10sp" /> <ImageButton android:id="@+id/bookmark" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_margin="2dp" android:layout_weight="1" android:background="#33B5E5" android:onClick="bookmarkPressed" android:padding="5dp" android:scaleType="fitCenter" android:src="@android:drawable/ic_input_add" /> <Button android:id="@+id/itemDetailsButton" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_margin="2dp" android:layout_weight="4" android:background="#33B5E5" android:drawableRight="@android:drawable/ic_delete" android:onClick="itemDetailsPressed" android:padding="5dp" android:text="Item Details" android:textColor="@android:color/white" android:textSize="10sp" /> </LinearLayout> 

Usted dice lo siguiente: "Básicamente, quiero que todos tengan la altura del hermano más alto". Dado que usted no sabe cuál va a ser el hermano con la altura más alta, entonces usted tendrá que hacerlo programatically, básicamente algo como esto:

  1. En primer lugar obtener la altura de cada uno de sus widgets, como este:

     int height = widget.getHeight(); //with this you know which is the tallest one 
  2. A continuación, cree un Parámetro RelativeLayout para establecer el atributo layout_alignTop en las vistas que deben escalar en consecuencia a la vista más alta. Claramente align_Top hace referencia al id de la vista más alta

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); layout.setLayoutParams(params); params.addRule(RelativeLayout.ALIGN_TOP,R.id.tallest_widget); widget.setLayoutParams(params); 
  3. Eso es todo, pero tenga en cuenta que en esta solución tendrá que hacer esto utilizando RelativeLayout en lugar de LinearLayout.

Creo que RelativeLayout es la solución para esto debido a la flexibilidad que le da, en este caso, le permite alinear la parte superior de sus puntos de vista en consecuencia a una referencia (es decir, la vista más alta).

En este caso, creo que deberías hacer lo siguiente: Al principio, todos los botones tienen el fondo, así que creo que deberías haber sabido la altura de todas las vistas. Tal vez usted puede hacer como estos, dar el LinearyLayout el maxHeight/minHeight o valor fijo, a continuación, utilice el layout_height="match_parent" en la subvista. A menos que tengas que ajustar el Ui pragmáticamente en tu código.

  • Android Layout_weight
  • Alinear la vista de texto según la selección de idioma (LEFT -RIGHT)
  • Linear Layout Android - ¿Cómo mantener el elemento en la parte inferior de la vista?
  • ¿Podemos usar un ScrollView dentro de un LinearLayout?
  • Alinear el botón a la parte inferior de la pantalla
  • Cómo obtener el color de fondo de la barra de estado para mostrar colorPrimaryDark
  • ¿Cómo puedo añadir un TextView a un LinearLayout dinámicamente en Android?
  • diseño con botones en un círculo?
  • Margen ignorado por LinearLayout
  • Establecer gravedad para LinearLayout mediante programación
  • Diseño complejo de Android lineal y relativo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.