Вложенные веса в макете

1

У меня есть макет, и я хочу, чтобы компоненты заполняли оставшуюся часть экрана (с использованием весов). Listview работает отлично.

Две кнопки в конце работают так же, как и я, но я получаю предупреждение: "Вложенные веса вредны для производительности".

Я думаю, что это проблема, потому что я уже использовал весовой параметр для ListView, потому что, когда я удаляю listview, предупреждение исчезает.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/listMessages_messages"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="5dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:layout_marginTop="10dip"
            android:layout_weight="1"
            android:background="#000000" >
        </ListView>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="50"
                android:visibility="invisible" />

            <Button
                android:id="@+id/btnNewConversation_message"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginRight="5dip"
                android:layout_weight="50"
                android:onClick="newConversation"
                android:text="@string/NewConversation" />
        </LinearLayout>

    </LinearLayout>
  • 0
    так что ты хочешь сейчас ..
  • 0
    Я хочу знать, что я сделал не так. ака, что вызывает предупреждение. так как я хочу использовать это в нескольких местах моего приложения
Теги:
android-layout
android-linearlayout
android-layout-weight
weight

2 ответа

1
Лучший ответ

Проверьте этот код. Я не получаю предупреждение

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="10">
    <ListView android:id="@+id/listMessages_messages"
        android:layout_width="fill_parent" android:layout_height="0px"
        android:layout_marginBottom="5dip" android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip" android:layout_marginTop="10dip"
        android:layout_weight="8" android:background="#000000">
    </ListView>
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="0px" android:orientation="horizontal"
        android:weightSum="10" android:layout_weight="2">
        <Button android:layout_width="0px"
            android:layout_height="wrap_content" android:layout_weight="5"
             />
        <Button android:id="@+id/btnNewConversation_message"
            android:layout_width="0px" android:layout_height="wrap_content"
            android:layout_marginRight="5dip" android:layout_weight="5"
            android:onClick="newConversation"  />
    </LinearLayout>
</LinearLayout> 

Когда вы размещаете оба вида 1.List View 2.Linear Layout (Две кнопки), вам нужно дать свойство веса, чтобы правильно их отрегулировать, а для горизонтального divison для кнопок также придать некоторую весовую ценность второму линейному макету разделить его равномерно с помощью весов. примечание во втором линейном макете я использовал ширину для кнопок до 0px

  • 0
    спасибо за ответ, у меня были проблемы с выяснением того, что вы имели в виду с помощью веса в предыдущем ответе. Теперь я могу приступить к работе над своим приложением.
  • 1
    Если вы не получили предупреждение с этим кодом, значит, ваша IDE неправильно настроена. Вложенные веса - это именно то, что, вложенное, простое добавление weightSum для их учета не меняет этого факта. Кроме того, я не понимаю, почему вы используете все эти значения ширины / высоты 0px, когда вы должны использовать fill_parent, в чем причина?
Показать ещё 1 комментарий
0

Если я правильно понял ваш вопрос, пожалуйста, выполните следующие действия: (скажем, около 10) с верхним расположением, придающим некоторый вес ListView, например 5 или 6, убедитесь, что свойство высоты макета установлено на 0px. Создайте дочерний элемент. Линейная компоновка дает оставшийся вес (т.е. 10- вес списка) как layout_weight для дочернего макета для дочернего макета layout_height, чтобы быть 0px с в этом макете, что две кнопки. Надеюсь, это то, что вам нужно

  • 0
    это близко к решению, но не полностью. На мой взгляд, не должно быть связи между просмотром списка и кнопками относительно веса. Вес списка - позволить ему заполнить оставшуюся часть экрана по вертикали (высота), а кнопки должны заполнить половину экрана по горизонтали (ширина).
  • 0
    Другими словами, вес Listview должен быть только для внешнего линейного макета, а вес для кнопок - для линейного макета, в котором они находятся, и не должен взаимодействовать со списком.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню