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