В макетах android, каков эффект / значение layout_height = "0dip"

Я видел несколько примеров, которые используют android: layout_height = "0px" или "0dip", но я не понимаю, как это влияет. Похоже, что размер макета 0 пикселей высок. Уменьшено ли значение, но какой-то другой фактор, такой как «вес» или высота любых родительских представлений?

Solutions Collecting From Web of "В макетах android, каков эффект / значение layout_height = "0dip""

Да, вы правы в отношении веса, когда вы хотите, чтобы ширина или высота контролировались по весу своим соглашением, чтобы установить это значение в 0dip и позволить весу управлять фактическим значением. Хотя я уверен, что 0 просто произвольно здесь, вы можете положить что-либо, но положить 0 делает ваше намерение более ясным.

При использовании LinearLayout, если вы устанавливаете layout_weight в ненулевое значение и устанавливаете layout_height (или layout_width ) в 0px или 0dip, LinearLayout распределяет любое неназначенное пространство вдоль соответствующей оси на основе весов. Например, если вы посмотрите на макет ниже представления с id * gestures_overlay *, у него есть layout_height 0dip и layout_weight 1, чтобы родительский LinearLayout растягивал его, чтобы заполнить доступное вертикальное пространство между двумя окружающими LinearLayouts. Если бы был другой вид с тем же 0dip layout_height и значением layout_weight они разделили бы вертикальное пространство на основе их значений веса.

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

Соответствующий пример из официальных документов разработчиков ( http://developer.android.com/guide/topics/ui/layout/linear.html ):

Одновременно взвешенные дети

Чтобы создать линейный макет, в котором каждый ребенок использует такое же пространство на экране, установите для android: layout_height каждого вида значение « 0dp » (для вертикального макета) или андроид: layout_width каждого вида « 0dp » ( Для горизонтальной компоновки). Затем установите для android: layout_weight каждого вида значение «1».