Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

При использовании LinearLayout, если вы установите значение layout_weight на ненулевое значение и установите layout_height (или layout_width) в 0px или 0dip, тогда LinearLayout распределяет любое неназначенное пространство вдоль соответствующей оси на основе веса. Так, например, если вы посмотрите на макет ниже представления с id * gestures_overlay *, он имеет layout_height 0dip и layout_weight 1, чтобы родительский LinearLayout растягивал его, чтобы заполнить доступное вертикальное пространство между двумя окружающими LinearLayouts. Если бы был другой вид с теми же значениями 0dip layout_height и a 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>

Ответ 3

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

Дети с равномерным весом

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