linearlayout layout_width examples ejemplo dinamico constraint caracteristicas android android-layout

layout_width - En diseños de Android, cuál es el efecto/significado de layout_height="0dip"



table layout android (4)

He visto varios ejemplos que usan android: layout_height = "0px" o "0dip" pero no entiendo el impacto de esto. Parece que haría que el diseño tenga 0 píxeles de alto. ¿Se ha mitigado el valor pero hay algún otro factor como el "peso" o la altura de las vistas principales?


Al usar LinearLayout si establece el layout_weight en un valor distinto de cero y establece el layout_height (o layout_width ) en 0px o 0dip, LinearLayout distribuye cualquier espacio no asignado a lo largo del eje apropiado en función de los pesos. Por ejemplo, si observa el diseño debajo de la Vista con id * gestures_overlay * tiene layout_height 0dip y layout_weight 1, por lo que el LinearLayout padre lo estira para llenar el espacio vertical disponible entre los 2 LinearLayouts circundantes. Si hubiera otra vista con el mismo 0dip layout_height y un valor de layout_weight , entonces compartirían el espacio vertical en función de sus valores de peso.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="6dip" android:text="@string/prompt_gesture_name" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/gesture_name" android:layout_width="0dip" android:layout_weight="1.0" android:layout_height="wrap_content" android:maxLength="40" android:singleLine="true" /> </LinearLayout> <android.gesture.GestureOverlayView android:id="@+id/gestures_overlay" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1.0" android:gestureStrokeType="multiple" /> <LinearLayout style="@android:style/ButtonBar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/done" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:enabled="false" android:onClick="addGesture" android:text="@string/button_done" /> <Button android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="cancelGesture" android:text="@string/button_discard" /> </LinearLayout> </LinearLayout>


Cuando tenemos que asignar el mismo peso a la vista diferente en LINEAR LAYOUT, asignamos layout / width = 0dp (para orientación horizontal) o layout / height = 0dp (para orientación vertical) y establecemos View / weight == 1 para cada vista dentro de ese diseño lineal.

Ventaja :::: - al asignar ancho o alto a 0dp, entonces no tiene impacto y debido al peso == 1 toda la vista ocupa el mismo espacio y cubre todo el tamaño de la pantalla.


Sí, tienes razón sobre el peso, cuando quieres que el ancho o la altura se controlen por peso, es su convención establecer ese valor en 0 dips y dejar que el peso controle el valor real. Aunque estoy bastante seguro de que 0 es arbitrario aquí, podrías poner cualquier cosa, pero poner 0 hace que tu intención sea más clara.


Un ejemplo relevante de los documentos oficiales para desarrolladores ( http://developer.android.com/guide/topics/ui/layout/linear.html ):

Niños con el mismo peso

Para crear un diseño lineal en el que cada niño use la misma cantidad de espacio en la pantalla, configure el android: layout_height de cada vista en " 0dp " (para un diseño vertical) o el android: layout_width de cada vista en " 0dp " ( para un diseño horizontal). Luego configure el android: layout_weight de cada vista en "1".