Простой пример использования <merge>и <include>в XML-макетах Android - PullRequest
73 голосов
/ 28 апреля 2010

Мне интересно узнать о тегах <merge> и <include> в XML-макетах Android. Я прочитал два урока, но пока не нашел простого примера использования.

Был бы рад, если бы кто-то мог привести такой пример или дать указатель на него.

Ответы [ 5 ]

96 голосов
/ 29 апреля 2010

some_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    // some views

    <include layout="@layout/view_part"/>

   // probably more views

</LinearLayout>

view_part.xml

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    // the views to be merged

</merge>
5 голосов
/ 30 мая 2012

Существует простой макет Android XML HOWTO, который также объясняет распространенную ошибку в http://www.coboltforge.com/2012/05/tech-stuff-layout/. Это может помочь ...

4 голосов
/ 11 апреля 2014

Взять пример:

У меня есть два тега <EditText> и <ListView >, которые будут иметь более одного интерфейса. Поэтому я создал XML-файл, как указано ниже, для включения во все такие пользовательские интерфейсы.

<?xml ...>
<EditText ... />
<ListView ... />   

Приведенный выше XML не является допустимым XML, поскольку у него не было корневого элемента. Таким образом, корневой элемент нужен только ради XML. <merge> является решением, приведенным ниже:

<?xml ...>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <EditText ... />
    <ListView ... />
</merge>
2 голосов
/ 23 мая 2015
Тег

<merge> используется для уменьшения количества уровней для повышения производительности рендеринга макетов. тег используется вместе с тегом <include>.

Возьмем пример, у нас есть схема входа в систему и она используется более чем в одной области действия нашего приложения. Используя тег для отображения login_layout, мы можем использовать и можем выйти из уровня.

Я также советую вам прочитать трюки с макетами. http://android -developers.blogspot.com.tr / 2009/03 / андроид-макет-триков-3-Оптимизировать-by.html

login_form.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Login form -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email..."
        android:inputType="textEmailAddress"
        android:maxLines="1"
        android:singleLine="true"
        android:visibility="visible" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password.."
        android:imeActionId="@+id/login"
        android:imeOptions="actionUnspecified"
        android:inputType="textPassword"
        android:maxLines="1"
        android:singleLine="true"
        android:text="1337"
        android:visibility="visible" />

    <Button
        android:id="@+id/sign_in_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16sp"
        android:paddingLeft="32sp"
        android:paddingRight="32sp"
        android:text="Login"
        android:visibility="visible" />

</LinearLayout>

example_layout.xml (любой макет, в который мы хотим включить login_form.xml)

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

    <include layout="@layout/login_form" />

</merge>

Мы видим иерархию уровней enter image description here

2 голосов
/ 24 августа 2010

id не вставляет код, иначе сработали бы относительные параметры макета. Это делает некоторую другую обработку

...