Простой пример и использование в Android XML-макетов


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

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

5 73

5 ответов:

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>

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

берите пример:

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

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

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

<?xml ...>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <EditText ... />
    <ListView ... />
</merge>

id не вставляет код, иначе относительные параметры макета работали бы. Он делает некоторые различные обработки

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

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

Я также советую вам прочитать советы о макеты. http://android-developers.blogspot.com.tr/2009/03/android-layout-tricks-3-optimize-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