Android XML布局中<merge>和<include>用法的简单示例


76

我很好奇Android XML版式中的<merge><include>标签。我已经阅读了两个教程,但是还没有找到一个简单的示例用法。

如果有人可以提供这样的例子或给出一个例子,那将是很高兴的。


2
请看一下官方的Android文档:使用<include />重新使用布局
JJD 2013年

stackoverflow.com/a/11093340/596555,可能对您有所帮助。
boiledwater

仅供参考,如果你正在寻找与使用这个菜单,你的运气,但你可以抬高多个XML文件,如下所述:stackoverflow.com/questions/4337034/...
约书亚品特

Answers:


98

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>

所以merge-thingy由它的文件名引用...在合并文件中没有id属性?
aioobe

19
@aioobe对。<include>基本上是指“获取该文件并将其内容粘贴到此处”。
扬琴科

嗨,实际上我在这里面临着一个严重的问题。我正在使用首选项并指定要在首选项内部使用的布局。在布局内部,我正在使用包含合并功能(因此我有一个占位符,它将根据版本使用开关或复选框)。问题是当我尝试查找视图时(即复选框/开关),我的首选项是onPostCreate方法,我总是将视图设为null!您能在这里帮忙吗? stackoverflow.com/questions/15708599/...
Adithya

3
尽管接受的答案是正确的,但我发现这里的文章:http : //mfarhan133.wordpress.com/2010/10/01/reusing-layout-include-merge-tag-for-androd/帮助我更好地实现了可视化。希望它能帮助某人。
韦恩·菲普斯

XML菜单声明可以做到这一点吗?
约书亚·品特

7

举个例子:

我有两个标签,<EditText>并且有<ListView >多个UI。因此,我创建了如下所示的XML文件,以将其包含在所有此类UI中。

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

上面的XML不是有效的XML,因为它没有根元素。因此仅出于XML的需要就需要一个根元素。<merge>是下面给出的解决方案:

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

谢谢您的有用解释:)
Shamshirsaz.Navid


3

<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>

我们可以看到级别层次结构 在此处输入图片说明


身份证呢?
Yousha Aleayoub

2

id不会粘贴代码,否则相关的布局参数将起作用。它做了一些不同的处理

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.