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).
- ¿Cómo igualmente span botones / diseños verticalmente en android?
- Excepción al eliminar una vista de un LinearLayout en Android
- TextView "fill_parent" no rellena el padre
- ¿Cómo centrar un GridView en su matriz LinearLayout?
- Aplicación ultravisual para iPhone como IU para Android
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>
- Android LinearLayout divisor, pero el porcentaje?
- Android: cómo escalar una imagen para llenar el fondo de un LinearLayout sin preservar la relación de aspecto?
- cómo hacer una disposición lineal horizontalmente desplazable
- Layout_gravity en LinearLayout
- Cómo alinear dos TextViews dentro de la celda LinearLayout?
- LinearLayout vs RelativeLayout
- Android - java.lang.UnsupportedOperationException: No se puede convertir a dimension: type = 0x12
- LinearLayout de un WebView y un botón
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:
-
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
-
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);
-
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.
- ¿Qué hace que android: required = "false" significa WRT a uses-permission?
- ListView en la hoja inferior