В макетах Android каков эффект / смысл layout_height = "0dip" - PullRequest
38 голосов
/ 13 мая 2011

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

Ответы [ 4 ]

35 голосов
/ 13 мая 2011

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

11 голосов
/ 13 мая 2011

При использовании 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>
3 голосов
/ 07 февраля 2013

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

Дети с одинаковым весом

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

0 голосов
/ 24 июля 2018

Когда нам нужно назначить равный вес для другого вида в LINEAR LAYOUT, тогда мы назначаем или layout / width = 0dp (для горизонтальной ориентации) или layout / height = 0dp (для вертикальной ориентации) и устанавливаемView / weight == 1 для каждого вида внутри этого линейного макета.

Advantage :::: - при назначении ширины или высоты 0dp, это не оказывает влияния и из-за веса == 1 все представление занимаетто же самое пространство и охватывает весь размер экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...