Предупреждение о вложенных весах - PullRequest
0 голосов
/ 27 ноября 2018

Я получаю это предупреждение на своем макете в Android Studio:

Вложенные веса вредны для производительности ниже ...
Для весов макета требуется, чтобы виджет был измерен дважды.Когда LinearLayout с ненулевыми весами вложен в другой LinearLayout с ненулевыми весами, то количество измерений увеличивается в геометрической прогрессии.
Идентификатор проблемы: NestedWeights

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"
        style="?android:attr/buttonBarStyle">
        <Button
            android:id="@+id/b1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="2dp"
            android:layout_weight="1"
            android:background="#093A3E"
            android:foreground="?attr/selectableItemBackground"
            android:text="One"
            android:textAllCaps="false"
            android:textColor="#fff"
            android:textSize="18sp"
            style="?android:attr/buttonBarButtonStyle" />
        <Button
            android:id="@+id/b2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="2dp"
            android:layout_weight="1"
            android:background="#3AAFB9"
            android:foreground="?attr/selectableItemBackground"
            android:text="Two"
            android:textAllCaps="false"
            android:textColor="#fff"
            android:textSize="18sp"
            style="?android:attr/buttonBarButtonStyle" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"
        style="?android:attr/buttonBarStyle">
        <Button
            android:id="@+id/b6"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="2dp"
            android:foreground="?attr/selectableItemBackground"
            android:layout_weight="1"
            android:background="#64E9EE"
            android:text="Three"
            android:textAllCaps="false"
            android:textColor="#fff"
            android:textSize="18sp"
            style="?android:attr/buttonBarButtonStyle" />
        <Button
            android:id="@+id/b7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:foreground="?attr/selectableItemBackground"
            android:layout_margin="2dp"
            android:layout_weight="1"
            android:background="#97C8EB"
            android:text="Four"
            android:textAllCaps="false"
            android:textColor="#fff"
            android:textSize="18sp"
            style="?android:attr/buttonBarButtonStyle" />
    </LinearLayout>
</LinearLayout>

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

Как можно избежатьэто предупреждение и получить тот же результат?Спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

Для лучшего подхода я разместил код ниже, используя ConstraintLayout

Для вашего подхода здесь есть решение Удалить из макетов android:layout_weight="1"

Вы должны переформатировать свой код в следующем порядке.

  1. LinearLayout (корневая) ориентация вертикальная (содержит 2 других LinearLayouts)
  2. LinearLayout (верхняя, внутри корневая) ориентация горизонтальная (с кнопкойвеса до 1)
  3. LinearLayout (снизу, внутри корня) горизонтальная ориентация (с весом кнопок до 1)

Лучшим подходом будет использование ConstraintLayout

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent">

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="1"
    app:layout_constraintBottom_toTopOf="@+id/button4"
    app:layout_constraintEnd_toStartOf="@+id/button3"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/button5"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="4"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/button4"
    app:layout_constraintTop_toBottomOf="@+id/button3" />

<Button
    android:id="@+id/button4"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/button5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/button2" />

<Button
    android:id="@+id/button3"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="2"
    app:layout_constraintBottom_toTopOf="@+id/button5"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/button2"
    app:layout_constraintTop_toTopOf="parent" />

  </android.support.constraint.ConstraintLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...