Линейная компоновка и вес в Android
Я всегда читал об этом забавном значении веса в документации Android.
Теперь я хочу попробовать его в первый раз, но он не работает вообще.
Как я понимаю из документации этот макет:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
</LinearLayout>
следует создать две кнопки, которые выровнены по горизонтали и разделяют пространство поровну. Проблема в том, что две кнопки не растут, чтобы заполнить пространство.
Я хотел бы, чтобы кнопки росли и заполняли всю строку. Если обе кнопки установлены в соответствии с родительским только первая кнопка отображается и заполняет всю строку.
18 ответов:
вы не установка
layout_weightсобственность. Ваш код читаетweight="1"и он должен читатьandroid:layout_weight="1".
3 вещи, чтобы помнить:
- установить android: layout_width для детей "0dp"
- установить android: weightSum родителя (edit: как заметил Джейсон Мур, этот атрибут является необязательным, потому что по умолчанию он установлен в сумму layout_weight детей)
- установить android: layout_weight каждого ребенка пропорционально (например, weightSum= "5", три ребенка: layout_weight="1", layout_weight="3", layout_weight="1")
пример:
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:weightSum="5"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="1" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" android:text="2" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="3" /> </LinearLayout>и в итоге:
это
android:layout_weight. Вес может быть использован только вLinearLayout. Если ориентация linearlayout вертикальная, то используйтеandroid:layout_height="0dp"и если ориентация горизонтальная, то используйтеandroid:layout_width = "0dp". Это будет прекрасно работать.
в этом рисунке представлена Линейная планировка.
вы можете по этой ссылке для получения дополнительной информации по этой теме. просто математика-просмотры, группы просмотра и макеты
Видео-Учебник Для Линейной Компоновки: Ширина, Высота И Вес
LinearLayout поддерживает присвоение веса отдельным детям. Этот атрибут присваивает "значение" значение зрения, и позволяет ему расширяться, чтобы заполнить любое оставшееся пространство в Родительском представлении. Вес по умолчанию равен нулю
расчет для назначения любого Оставшихся/Дополнительные пространство между детьми. (не общей площади)
пробел присвоить ребенку = (индивидуальный вес ребенка) / (сумма веса каждого ребенка в линейной компоновке)
Пример (1): если есть три текстовых поля и два из них объявляют вес 1, а третий не имеет веса (0), то Оставшихся/Дополнительные космос назначить
1st text box = 1/(1+1+0) 2nd text box = 1/(1+1+0) 3rd text box = 0/(1+1+0)Пример (2) : допустим, у нас есть текстовая метка и два элемента редактирования текста в горизонтальной строке. На этикетке не указан layout_weight, поэтому она занимает минимальное пространство, необходимое для оказания. Если layout_weight каждого из двух текстовых правок элементы имеет значение 1, оставшаяся ширина в Родительском макете будет разделена поровну между ними (потому что мы утверждаем, что они одинаково важны).
calculation : 1st label = 0/(0+1+1) 2nd text box = 1/(0+1+1) 3rd text box = 1/(0+1+1)Если первое текстовое поле имеет layout_weight 1, а второе текстовое поле имеет layout_weight 2, то одна треть оставшегося пространства будет отдана первому, а две трети-второму (потому что мы утверждаем, что второй более важен).
calculation : 1st label = 0/(0+1+2) 2nd text box = 1/(0+1+2) 3rd text box = 2/(0+1+2)
в поле ширина кнопки, заменить
wrap-contentС0dp.
Используйте атрибут layout_weight вида.android:layout_width="0dp"вот как будет выглядеть ваш код:
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:text="Register" android:id="@+id/register" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" /> <Button android:text="Not this time" android:id="@+id/cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" /> </LinearLayout>layout_weight используется для распределения оставшегося пространства в пропорциях. В этом случае две кнопки принимают ширину "0dp". Таким образом, оставшееся пространство будет разделено на пропорции 1:1 между ними, т. е. пространство будет разделено поровну между видами кнопок.
как ответ @Manoj Seelan
заменить
android:layout_weightСandroid:weight.при использовании вес С
LinearLayout. вы должны добавитьweightSumнаLinearLayoutи в соответствии с ориентацией вашегоLinearLayoutвы должны установить0dpдля ширины/высоты для всехLinearLayoutС точки зрения детейпример :
если ориентация
LinearlayoutиVertical, затем установите ширину всех `ы виды с0dp<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:weightSum="3"> <Button android:text="Register" android:id="@+id/register" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="2" /> <Button android:text="Not this time" android:id="@+id/cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" /> </LinearLayout>если ориентация
Linearlayoutэтоhorizontal, затем установите высоту всехLinearLayoutдетские представления с0dp.<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3"> <Button android:text="Register" android:id="@+id/register" android:layout_width="wrap_content" android:layout_height="0dp" android:padding="10dip" android:layout_weight="2" /> <Button android:text="Not this time" android:id="@+id/cancel" android:layout_width="wrap_content" android:layout_height="0dp" android:padding="10dip" android:layout_weight="1" /> </LinearLayout>
возможно установка обеих кнопок layout_width свойства "fill_parent" будет делать трюк.
Я только что протестировал этот код и он работает в эмуляторе:
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="hello world"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="goodbye world"/> </LinearLayout>обязательно установите layout_width в "fill_parent" на обеих кнопках.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/logonFormButtons" android:layout_width="fill_parent" android:layout_height="wrap_content" android:baselineAligned="true" android:orientation="horizontal"> <Button android:id="@+id/logonFormBTLogon" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/logon" android:layout_weight="0.5" /> <Button android:id="@+id/logonFormBTCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/cancel" android:layout_weight="0.5" /> </LinearLayout>
В приведенном выше XML, установите
android:layout_weightлинейной компоновки, как2:android:layout_weight="2"
плюс вам нужно добавить это
android:layout_width="0dp"для просмотра детей [вид кнопки] изLinerLayout
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="2" android:text="Button 1" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="3" android:text="Button 2" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="2" android:text="Button 3" /> </LinearLayout>
вы должны написать как это работает для меня
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="2"> <Button android:text="Register" android:id="@+id/register" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" /> <Button android:text="Not this time" android:id="@+id/cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" />
Это идеальный ответ на ваш проблема
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:text="Register" android:id="@+id/register" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dip" weight="1" /> <Button android:text="Not this time" android:id="@+id/cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dip" weight="1" /> </LinearLayout>
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="#008"> <RelativeLayout android:id="@+id/paneltamrin" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <Button android:id="@+id/BtnT1" android:layout_width="wrap_content" android:layout_height="150dp" android:drawableTop="@android:drawable/ic_menu_edit" android:drawablePadding="6dp" android:padding="15dp" android:text="AndroidDhina" android:textColor="#000" android:textStyle="bold" /> </RelativeLayout> <RelativeLayout android:id="@+id/paneltamrin2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <Button android:layout_width="wrap_content" android:layout_height="150dp" android:drawableTop="@android:drawable/ic_menu_edit" android:drawablePadding="6dp" android:padding="15dp" android:text="AndroidDhina" android:textColor="#000" android:textStyle="bold" /> </RelativeLayout> </LinearLayout>
Ниже приведены изменения (отмечены в полужирный) в коде:
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:text="Register" android:id="@+id/register" android:layout_width="0dp" //changes made here android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" /> //changes made here <Button android:text="Not this time" android:id="@+id/cancel" android:layout_width="0dp" //changes made here android:layout_height="wrap_content" android:padding="10dip" android:layout_weight="1" /> //changes made here </LinearLayout>Так как ваш LinearLayout имеет ориентацию по горизонтали, поэтому вам нужно будет сохранить ваш ширина только как 0dp. для использования весов в этом направлении . (если бы ваша ориентация была вертикальной, вы бы сохранили свою высоту только 0dp).
Так как есть 2 вида и вы разместили
android:layout_weight="1"для обоих видов это означает, что он разделит два вида одинаково в горизонтальном направлении (или по ширине).



Comments