суббота, 18 февраля 2012 г.

Android Training-Улучшение производительности разметок-Повторное использование с < include / >


Хотя Android предлагает множество различных виджетов в роли небольших повторно используемых интерактивных элементов иногда возникает необходимость повторного использования больших компонентов что требует специальной разметкию. Для эффективного повторного использования разметок целиком вы можете использовать теги <include/> и <merge/> чтобы вложить в текущую разметку другую разметку. Повторное использование разметок является мощным инструментом позволяющим вам создавать многократно используемые сложные разметки. Например, панель с кнопками да/нет или собственный индикатор прогресса с текстовым описанием. Это также означает, что любые элеметы вашей программы, которые являются общими в множественных разметках могут быть извлечены, подготовлены отдельно и затем включены в каждую разметку. Таким образом, хотя вы можете создавать индивидуальные UI компоненты написанием собственных View, вы можете делать это намного легче, повторно используя разметки.

Создание повторно используемой разметки.

Если вы уже выбрали разметку для повторного использования, создайте новый XML файл и опишите ее. Для примера, вот разметка от G-Kenya, определяющая полосу заголовка, включаемую в каждую activity (titlebar.xml):
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width=”match_parent”
    android:layout_height="wrap_content"
    android:background="@color/titlebar_bg">

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content" 
               android:src="@drawable/gafricalogo" />
</FrameLayout>
Корневой View должен быть именно таким, каким бы вы хотели его видеть в каждой разметке, в которую вы добавите эту разметку.

Использование тега <include/>.
Внутри разметки, куда вы хотите добавить повторно используемый компонент добавьте тег <include/>. Для примера, разметка от G-Kenya включающая полосу заголовка описанную выше:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"     android:layout_width=”match_parent”     android:layout_height=”match_parent”     android:background="@color/app_bg"     android:gravity="center_horizontal">     <include layout="@layout/titlebar"/>     <TextView android:layout_width=”match_parent”               android:layout_height="wrap_content"               android:text="@string/hello"               android:padding="10dp" />     ... </LinearLayout>
Вы также можете переопределить все параметры разметки (любые android:layout_* атрибуты) корневого вида включенной разметки указывая их в теге <include/> Например:
<include android:id=”@+id/news_title”
         android:layout_width=”match_parent”
         android:layout_height=”match_parent”
         layout=”@layout/title”/>
Использование тега <merge/>.
Тег <merge /> позволяет избавиться от избыточных групп видов(view groups) в вашей иерархии видов при включении одной разметки в другую. Например, если главная разметка-это вертикальный LinearLayout в котором два последовательных вида могут быть повторно использованы во множественных разметках, тогда повторно используемая разметка, в которую вы помещаете два вида требует собственный корневой вид. Однако, использование другой LinearLayout как корневой для повторно-используемой разметки приведет к вертикальному LinearLayout внутри другого вертикального LinearLayout. Вложенный LinearLayout не принесет ничего, кроме замедления в работе UI.

Для избежания использования избыточных групп видов вы можете использовать элемент <merge> как корневой элемент для повторно используемой разметки. Например:
<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="@string/add"/>

    <Button
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="@string/delete"/>
</merge>
Теперь, когда вы включите эту разметку внутрь другой (при помощи тега <include/> ), система проигнорирует элемент <merge> и поместит сразу же 2 кнопки в разметку, на место, указанное тегом <include/>.
Оригинальный материал доступен по адресу

Комментариев нет:

Отправить комментарий