`
pxq19890719
  • 浏览: 52417 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android merge标签的用法(转载)

阅读更多
单独将<merge />标签做个介绍,是因为它在优化UI结构时起到很重要的作用。目的是通过删减多余或者额外的层级,从而优化整个Android Layout的结构。

将通过一个例子来了解这个标签实际所产生的作用,这样可以更直观的了解<merge/>的用法。

建立一个简单的Layout,其中包含两个Views元素:ImageView和TextView 默认状态下我们将这两个元素放在FrameLayout中。其效果是在主视图中全屏显示一张图片,之后将标题显示在图片上,并位于视图的下方。以下是xml代码:

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

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"

        android:scaleType="center"
        android:src="@drawable/golden_gate" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:layout_gravity="center_horizontal|bottom"

        android:padding="12dip"

        android:background="#AA000000"
        android:textColor="#ffffffff"

        android:text="Golden Gate" />

</FrameLayout>应用上边的Layout运行的视图为:





启动 tools> hierarchyviewer.bat工具查看当前UI结构视图:





我们可以很明显的看到由红色线框所包含的结构出现了两个framelayout节点,很明显这两个完全意义相同的节点造成了资源浪费(这里可以提醒大家在开发工程中可以习惯性的通过hierarchyViewer查看当前UI资源的分配情况),那么如何才能解决这种问题呢(就当前例子是如何去掉多余的frameLayout节点)?这时候就要用到<merge />标签来处理类似的问题了。我们将上边xml代码中的framLayout替换成merge:



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

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"

        android:scaleType="center"
        android:src="@drawable/golden_gate" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:layout_gravity="center_horizontal|bottom"

        android:padding="12dip"

        android:background="#AA000000"
        android:textColor="#ffffffff"

        android:text="Golden Gate" />

</merge>运行程序后在Emulator中显示的效果是一样的,可是通过hierarchyviewer查看的UI结构是有变化的,当初多余的FrameLayout节点被合并在一起了,或者可以理解为将merge标签中的子集直接加到Activity的FrameLayout跟节点下(这里需要提醒大家注意:所有的Activity视图的根节点都是frameLayout)。如果你所创建的Layout并不是用framLayout作为根节点(而是应用LinerLayout等定义root标签),就不能应用上边的例子通过merge来优化UI结构。





除了上边的例子外,meger还有另外一个用法

当应用Include或者ViewStub标签从外部导入xml结构时,可以将被导入的xml用merge作为根节点表示,这样当被嵌入父级结构中后可以很好的将它所包含的子集融合到父级结构中,而不会出现冗余的节点。

另外有两点需要特别注意:

<merge />只可以作为xml layout的根节点。
当需要扩充的xml layout本身是由merge作为根节点的话,需要将被导入的xml layout置于 viewGroup中,同时需要设置attachToRoot为True。(更多说明请参见inflate()文档)


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lewutian/archive/2009/08/18/4458567.aspx
分享到:
评论

相关推荐

    android merge 标签使用介绍

    本篇文章将详细介绍`merge`标签的使用方法及其优势。 `merge`标签最初被引入是为了减少视图层次,这是因为在Android系统中,每个视图层级都会带来额外的绘制开销。当我们在一个布局文件中嵌套多个视图时,这些层级...

    android include merge标签

    下面将详细阐述这两个标签的功能、用法以及如何结合使用。 首先,`include`标签的作用是允许你在多个布局文件中复用同一份布局。这在你有多个界面需要共享相同设计的情况下特别有用。例如,标题栏(titlebar)就是...

    Android UI 优化之merge标签的使用

    merge标签的使用方法 #### 3.1 嵌套在标签中 ```xml ``` 在`content.xml`中: ```xml &lt;merge xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;!-- 子视图在这里 --&gt; &lt;/merge&gt; ``` #### 3.2 与...

    Android中include和merge标签的使用

    本篇文章将深入探讨这两个标签的使用方法以及它们在Android开发中的作用。 ### `include`标签 `include`标签允许你在不同的布局文件中包含一个公共的布局,这样可以减少代码重复,提高代码复用性。基本语法如下: ...

    android merge和include简单使用

    使用`merge`时,需要注意在XML布局文件的根元素使用`&lt;merge&gt;`代替`&lt;LinearLayout&gt;`、`&lt;RelativeLayout&gt;`等常见的布局容器,并且该`merge`标签通常配合`&lt;include&gt;`一起使用。 接下来,我们来看`include`标签。`...

    android中include和merge标记的区别和使用

    接下来,我们将深入探讨这两个标记的区别和使用方法。 ### `include`标签 `include`标签用于将一个布局文件嵌入到另一个布局文件中,它允许开发者复用已有的布局组件。使用`include`标签可以将常见的UI元素如头部...

    Include和merge标签使用

    让我们深入探讨这两种标签的使用方法及其优化布局的作用。 首先,`&lt;include&gt;`标签允许我们将一个布局文件插入到另一个布局文件中,这样可以实现布局组件的重用。例如,假设我们有一个通用的头部布局(header.xml)...

    android layout merge

    综上所述,`merge`布局是Android UI开发中的一个重要工具,它有助于提升性能,简化代码,尤其是在使用Genymotion等高性能模拟器进行测试和调试时。熟练掌握`merge`布局的使用,对于提升应用的用户体验和开发效率具有...

    博客《ListView滑动删除实现之一——merge标签与LayoutInflater.inflate()》对应源码

    博客《ListView滑动删除实现之一——merge标签与LayoutInflater.inflate()》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/45155965

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    Android中使用include标签和merge标签重复使用布局

    本文将详细介绍这两个标签的使用方法及其优势。 首先,让我们了解一下`&lt;include/&gt;`标签。`&lt;include/&gt;`标签允许开发者将一个XML布局文件嵌入到另一个布局文件中,从而实现布局的复用。这在处理复杂且多变的界面设计...

    Oracle merge into用法

    `MERGE INTO`语句的一个关键优势是它允许使用`WHERE`子句来细化更新和插入的规则。这意味着你可以控制哪些记录会被更新,哪些记录会被插入,甚至可以排除某些特定的记录不进行任何操作。这种精细的控制能力对于数据...

    Android-auto-merge-language是自动替换Android项目中的strings.xml多语文案工具

    "Android-auto-merge-language"工具正是为了解决这一问题而设计的,它是一个自动化工具,能够有效地管理和合并项目的多语言资源,尤其是strings.xml文件中的文案。 这个工具名为"auto-merge-language",它的主要...

    oracle merge 用法详解

    ### Oracle Merge 用法详解 #### 一、Oracle Merge 命令介绍 自Oracle 9i版本开始,Oracle数据库引入了一个非常强大的SQL语句——`MERGE`命令。通过这个命令,用户可以在一个单一的SQL语句中完成对表的插入(`...

    merge用法详解(实例详解)

    【知识点详解】 ...通过以上介绍,我们了解了`MERGE INTO`语句的基本概念和使用方法,以及在实际场景中如何进行数据同步。在数据库管理和ETL过程中,合理运用`MERGE`能有效地提高数据处理的效率和准确性。

    Hibernate中的merge使用详情解说

    例如,如果我们在使用 merge 方法前没有设置对象的 ID,那么 merge 方法将抛出异常。 在使用 merge 方法时,我们还需要注意 Session 的生命周期。在上面的示例代码中,我们可以看到,在第一个 Session 中,我们使用...

    Android UI优化之ViewStub标签的使用

    本篇文章将详细探讨ViewStub的使用方法及其在UI优化中的作用。 **一、ViewStub的基本概念** ViewStub是一个不可见且不占用屏幕空间的视图,它主要用于在运行时动态地加载其他布局。由于它在初始化时不进行任何布局...

    merge的用法

    ### Merge的用法详解 在数据库操作中,`MERGE`语句是一种非常强大的工具,它结合了`UPDATE`和`INSERT`的功能,允许我们根据源表中的数据更新目标表中的记录,如果源表中的记录在目标表中不存在,则可以插入新记录。...

Global site tag (gtag.js) - Google Analytics