#android #android-layout
#Android #android-layout
Вопрос:
Я видел несколько примеров, в которых используется Android:layout_height =»0px» или «0dip», но я не понимаю влияния этого. Кажется, что это сделало бы макет высотой 0 пикселей. Уменьшено ли значение, но каким-либо другим фактором, таким как «вес» или высота каких-либо родительских представлений?
Ответ №1:
Да, вы правы насчет веса, когда вы хотите, чтобы ширина или высота контролировались с помощью веса, его соглашение устанавливает это значение в 0dip и позволяет весу контролировать фактическое значение. Хотя я почти уверен, что 0 здесь просто произвольно, вы могли бы указать что угодно, но указание 0 делает ваше намерение более ясным.
Комментарии:
1. установка
layout_width
orlayout_height
в0px
or0dip
скорее больше для производительности во время выполнения, чем для соглашения. Установка его в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 весь вид занимает одинаковое пространство и охватывает весь размер экрана.