Android layout_weight comportment - PullRequest
4 голосов
/ 11 мая 2011

Я пытаюсь создать макет Android, используя layout_weight, чтобы он подходил для устройств всех размеров, и у меня возникли проблемы с пониманием его ассортимента.

Я заметил, что изменение layout_width / layout_height повлияло на ассортимент layout_weight, но я не понимаю, как.

Скажем, к примеру, я хочу иметь вертикальную LinearLayout, разделенную на три внутренних LinearLayout, так что один сверху и один снизу занимают 25% экрана, а в середине 50%, и это не должно зависеть от содержания внутренних макетов. (Если содержимое внутреннего элемента LinearLayout слишком велико, оно не должно сдвигать другие макеты)

Чтобы сделать это, я должен установить атрибут layout_height внутреннего LinearLayout на 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>

Результаты: enter image description here

Вес 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>

Результаты: enter image description here

** Вес 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>

Результаты: enter image description here

Ответы [ 3 ]

3 голосов
/ 24 октября 2012

Вы можете попробовать установить layout_height = 0dp

3 голосов
/ 06 декабря 2012

Чтобы layout_weight работал должным образом (и задокументировано), вы должны , а не установить для layout_height ни fill_parent, ни match_parent.

Пример длясправа http://developer.android.com/guide/topics/ui/layout/linear.html#Weight показывает пример, где layout_height установлен на 0dp.Однако, если вы вообще не установите его или не установите wrap_content, layout_weight будет работать так, как ожидается.

1 голос
/ 11 мая 2011

Вы должны установить layout_height всех трех внутренних макетов на «fill_parent», а затем изменить их вес, чтобы они выглядели так, как вы хотите.

...