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

#android #android-layout

#Android #android-layout

Вопрос:

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

Ответ №1:

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

Комментарии:

1. установка layout_width or layout_height в 0px or 0dip скорее больше для производительности во время выполнения, чем для соглашения. Установка его в 0px (или 0dip ) пропустит циклы процессора, необходимые для начальной инициализации, и ширина / высота представления будут скорректированы по мере необходимости. Таким образом, во время выполнения нужно будет вычислять высоту / ширину только один раз, а не 2 раза…

Ответ №2:

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

Комментарии:

1. в чем смысл нулевого веса? преподаватель owr в курсе Android задает этот вопрос. каково использование нулевого веса при проектировании пользовательского интерфейса Android?

Ответ №3:

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

Дочерние элементы с одинаковым весом

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

Ответ №4:

Когда нам нужно присвоить равный вес другому виду в ЛИНЕЙНОЙ компоновке, тогда мы назначаем либо layout / width = 0dp (для горизонтальной ориентации), либо layout / height = 0dp (для вертикальной ориентации) и устанавливаем View / weight == 1 для каждого вида внутри этой линейной компоновки.

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