Я пытаюсь построить макет андроида, используя layout_weight
, чтобы соответствовать всем размерам устройств, и у меня есть некоторые проблемы с пониманием его соответствия.Android layout_weight comportment
Я заметил, что изменение layout_width
/layout_height
повлияло на оценку layout_weight
, но я не понимаю, как это сделать.
Скажем, например, я хочу иметь вертикальную LinearLayout
разделить на три колб LinearLayout
таким образом, что один в верхней части и один в нижней части заполняют 25% экрана, а также на в среднем 50%, и это не должно зависеть от содержания внутренних макетов. (Если содержание внутренней LinearLayout
слишком большой, она не должна перекладывать другие макеты)
Для того, чтобы сделать это, я должен установить атрибут внутреннего LinearLayout
layout_height
к fill_parent
или wrap_content
?
Спасибо!
EDIT: Похоже, что layout_weight обратно пропорционален размеру макета, который будет занимать.
3 примеры:
Вес 1/1/1 (рабочие, как я ожидал)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#FF0000"/> //RED
<LinearLayout
android:id="@+id/layout2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#00FF00"/> //GREEN
<LinearLayout
android:id="@+id/layout3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#0000FF"/> //BLUE
</LinearLayout>
Результаты:
Вес 1/2/1 (Почему, а почему?)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#FF0000"/> //RED
<LinearLayout
android:id="@+id/layout2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="2"
android:background="#00FF00"/> //GREEN
<LinearLayout
android:id="@+id/layout3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#0000FF"/> //BLUE
</LinearLayout>
Результаты:
** Вес 3/2/3 (Что делать приборе имеется с 1/2/1):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="3"
android:background="#FF0000"/> //RED
<LinearLayout
android:id="@+id/layout2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="2"
android:background="#00FF00"/> //GREEN
<LinearLayout
android:id="@+id/layout3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="3"
android:background="#0000FF"/> //BLUE
</LinearLayout>
Результаты:
@Egor: Я попытался это сделать, но я не понимаю, как действует 'layout_weight' в этом случае: если я ставлю 1/1/1, три части будут равны. Но если я ставлю 1/2/1, я не вижу второго, и экран просто делится на 50% от первого макета и 50% от третьего макета. Как это работает? – nbarraille
@nbarraille: вы должны опубликовать соответствующий макет, чтобы мы могли лучше оценить, что не так в этом конкретном случае, потому что пространство должно быть распределено по вашему указанию. – dmon
@dmon: Я обновил свой первоначальный пост с примерами. – nbarraille