Я хочу 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>