0

Я хочу SearchView в верхней части макета Activity, а затем ниже, что мне нужно добавить два горизонтальных друг друга рядом друг с другом, так что справа возьмем двойное горизонтальное пространство, чем левое.Вложенное layout_weight плохое для производительности: Почему я получаю предупреждение Lint, когда я устанавливаю значение layout_width в 0dp?

Так что я имею в виду:

ViewGroup, содержащий как фрагменты должны занимать все оставшееся место после SearchView рисуется. Поэтому я дал ему layout_weight из 1. Затем я добавил LinearLayout с двумя FrameLayout s для фрагментов и дал левый Layout_weight из 1, а справа - значение 2.

Но я получаю предупреждение Lint о том, что вложенные веса плохи для производительности.

Я читал об этом на SO и found this:

Компоновка вес требует виджета для измерения дважды.

Это basic tutorial on the developer training here говорит, что это дело так:

Для повышения эффективности компоновки, когда вы указываете вес, вы должны изменить ширину EditText равным нулю (0dp). Установка ширины улучшает производительность макета, поскольку использование «wrap_content» в качестве ширины требует, чтобы система вычисляла ширину, которая равна , что в конечном счете не имеет значения, поскольку для значения веса требуется другая ширина для заполнения оставшегося пространства.

Но поскольку в моем макете я устанавливаю layout_width="0dp" когда родитель LinearLayout «s orientation является vertical и layout_height="0dp", когда родитель LinearLayout» s orientation является horizontal. Почему я все еще получаю предупреждение Lint?

Что я могу сделать по этому поводу? Потому что RelativeLayout не может указать, сколько «оставшегося пространства» будет принимать элемент (указанный layout_weight, который, кажется, не включен в RelativeLayout.LayoutParams).

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 

    android:orientation="vertical" 

    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context="${relativePackage}.${activityClass}" > 

    <android.support.v7.widget.SearchView 
     android:id="@+id/searchActivity_searchView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" > 
     <FrameLayout 
      android:id="@+id/searchActivity_frameLayout" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /><!-- Nested weights are bad for performance Lint Warning --> 

     <FrameLayout 
      android:id="@+id/searchActivity_frameLayout1" 
      android:layout_weight="2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 



</LinearLayout> 

ответ

1

Это предупреждение, в этом случае вы должны быть в порядке, это больше, чтобы держать вас от злоупотребления много вложенного веса и заболачивания вниз вашего приложения. Другой вариант - получить размер экрана во время выполнения и установить ширину макетов кадров вручную.

 Смежные вопросы

  • Нет связанных вопросов^_^