Intereting Posts
Как вращать растровое изображение в Android вокруг центра изображений без плавного движения Как читать текстовый файл в Android? Android.mk – создать весь исходный файл в каталоге Хост схемы не работает на android lollipop, нажмите на ссылку, чтобы открыть приложение Как проверить, имеет ли текущая активность диалоговое окно впереди? Динамическое изменение размеров динамиков с помощью ViewFlipper Android API-23: замена InetAddressUtils Почему я получаю NullPointerException при отправке SMS на HTC Desire или что такое SubmitPdu? Xamarin Android с multidex – ошибка в режиме отладки Почему Android урезает мой заголовок ActionBar? Android Studio – проверка кода – исключение сгенерированных файлов Ошибка раздувания класса com.google.android.youtube.player.YouTubePlayerView в списке Адаптер Как ограничить изменения страницы ViewPager на один за жест Как закрыть активность с помощью клавиатуры программного обеспечения после нажатия BACK? Предупреждение о недоставке: variant.getOutputFile () и variant.setOutputFile () устарели

Как избежать вложенных весов?

У меня есть xml-макет для ввода pincode:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF000000" android:orientation="vertical" android:weightSum="1" > <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_margin="5dp" android:layout_weight="0.2" android:background="@android:drawable/edit_text" android:gravity="center_vertical" android:orientation="horizontal" > <EditText android:id="@+id/pinDisplay" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.85" android:background="@null" /> <ImageButton android:id="@+id/backspace" style="@android:style/Widget.Button" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center_vertical" android:layout_margin="3dp" android:layout_weight="0.15" android:gravity="center" android:src="@android:drawable/ic_input_delete" /> </LinearLayout> <!-- Keypad section --> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0.8" android:baselineAligned="false" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_marginLeft="5dip" android:layout_marginRight="4dip" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/one" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="1" android:textAppearance="@android:attr/text" /> <Button android:id="@+id/two" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="2" /> <Button android:id="@+id/three" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="3" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="0sp" android:layout_marginLeft="5dip" android:layout_marginRight="4dip" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/four" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="4" /> <Button android:id="@+id/five" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="5" /> <Button android:id="@+id/six" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="6" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="0sp" android:layout_marginLeft="5dip" android:layout_marginRight="4dip" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/seven" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="7" /> <Button android:id="@+id/eight" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="8" /> <Button android:id="@+id/nine" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="9" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="0sp" android:layout_marginBottom="10dip" android:layout_marginLeft="5dip" android:layout_marginRight="4dip" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/ok" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:enabled="false" android:text="OK" android:textColor="#B8B8B8" /> <Button android:id="@+id/zero" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="0" /> <Button android:id="@+id/clear" android:layout_width="0sp" android:layout_height="fill_parent" android:layout_weight="1" android:text="Clear" /> </LinearLayout> </LinearLayout> </LinearLayout> 

Макет в порядке, но я получаю много предупреждений Lint о вложенных весах.

Вложенные веса плохи для производительности

Я не замечаю, что загрузка макета медленная или что-то еще. Что я могу сделать, чтобы избежать вложенных весов? Или я должен просто оставить его так, как есть?

Solutions Collecting From Web of "Как избежать вложенных весов?"

Вы можете использовать RelativeLayout, чтобы избежать вложенных весов.

Вложенные веса плохи для производительности, потому что число измерений увеличивается экспоненциально с каждым вложенным.

В общем, вы должны попытаться использовать RelativeLayout вместо вложенности многих LinearLayouts.

Из документации :

Примечание. Хотя вы можете вложить один или несколько макетов в другой макет для достижения вашего дизайна пользовательского интерфейса, вы должны стремиться к тому, чтобы иерархия макета была как можно более мелкой. Ваш макет рисуется быстрее, если у него меньше вложенных макетов (иерархия с широким представлением лучше, чем иерархия глубокого представления).

Но когда вам нужны веса, как сейчас, RelativeLayout вам не поможет; Вместо этого я предлагаю использовать TableLayout для вашей клавиатуры, чтобы уменьшить количество вложенных макетов.