博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android中include和merge标记的区别和使用
阅读量:3562 次
发布时间:2019-05-20

本文共 1802 字,大约阅读时间需要 6 分钟。

include和merge标记的作用主要是为了解决layout的重用问题。

比如我们有三四个Activity但是他们都要用到同一个样式的标题栏,虽然我们把一样的代码copy个三四遍也没关系,但实在是太丑了,而且效率太低,如果这个标题栏要改样式,你岂不是要去三四个地方分别改动。

为了解决这个问题,android中有了include和merge标记

 

以下为标题栏的layout文件titlebar.xml 我们将使用Include标记重用这个文件

<FrameLayout xmlns: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>

那么在那三四个activity中你可以适用Include标记

<LinearLayout xmlns:android=""

   android:orientation="vertical"
   android:layout_width=”match_parent”
   android:layout_height=”match_parent”
   android:gravity="center_horizontal">

   <includelayout="@layout/titlebar"/>  

   <TextView android:layout_width=”match_parent”

             android:layout_height="wrap_content"
             android:text="@string/hello" />

    ...

</LinearLayout>

调用了Include之后,titlebar文件的内容就被完全嵌入到了include所指定的位置。而且你还可以在include中重新更改一些属性的值,比如

<include android:id=”@+id/news_title”

        android:layout_width=”match_parent”
        android:layout_height=”match_parent”

        layout="@layout/title"/>

原来layout中的wrap_content属性就被改成了match_parent属性

 

 

 

再来说一下merge标记

上面的include有一个副作用就是他多套了一层root节点FrameLayout ,使得再构图的时候会多花费一点时间

如果你不能容忍这个的话那你可以试一下merge标记

titlebar2.xml

<merge xmlns:android="">

   <ImageView android:layout_width="wrap_content"

           android:layout_height="wrap_content" 
            android:src="@drawable/gafricalogo"/>

</merge>

这样行成的titlebar2文件就少了外层的root节点,merge标记可以直接成为root节点,当titlebar2被include到文件中时,merge标记就会被忽略掉,而直接由里面的ImageView取代原来include的位置。避免了冗余的layout。

 

所以include和merge是配合使用的,不是一个互斥的或者说是平级的关系。

 

再来说一个在使用这两个标签时最容易出现的问题。

经常会有同学在RelativeLayout中使用include标签

但是却发现include进来的控件无法用layout_alignParentBottom="true"之类的标签来调整。这个真的非常恼火。其实解决方法非常简单,只要你在include的时候同时重载下layout_width和layout_height这两个标签就可以了。如果不重载,任何针对include的layout调整都是无效的!

转载地址:http://sbcrj.baihongyu.com/

你可能感兴趣的文章
java中对象的类型转换
查看>>
java基础入门 String
查看>>
Java基础入门 StringBuffer类
查看>>
Java基础入门 currentTimeMillis方法
查看>>
Java基础入门 arraycopy方法
查看>>
Java基础入门 Math类
查看>>
Java基础入门 Random类
查看>>
Java基础入门 Date类
查看>>
Java基础入门 Calendar类
查看>>
Java基础入门 DateFormat类
查看>>
Java基础入门 Window类及Panel类
查看>>
Java基础入门 AWT事件处理
查看>>
Java基础入门 鼠标事件
查看>>
Java基础入门 键盘事件
查看>>
Java基础入门 GridLayout
查看>>
JavaEE Bean的两种常用作用域 singleton(单例)和prototype(原型)
查看>>
MySQL 数据库索引
查看>>
JavaEE Spring与MyBatis的整合之传统DAO方式整合(教材学习笔记)
查看>>
JavaEE MyBatis与Spring的整合——基于mapper接口方式开发(教材学习笔记)
查看>>
JavaWeb 使用Cookie实现——显示用户上次访问时间(教材学习笔记)
查看>>