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

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

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

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


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/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="http://4265337.blog.163.com/blog/@drawable/gafricalogo" /></FrameLayout>




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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width=”match_parent”    android:layout_height=”match_parent”    android:gravity="center_horizontal">    <include layout="@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="http://schemas.android.com/apk/res/android">    <ImageView android:layout_width="wrap_content"            android:layout_height="wrap_content"             android:src="http://4265337.blog.163.com/blog/@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://4265337.blog.163.com/blog/static/195375820127935731114/

文章写得不错我就原文拿过来了,希望能帮到人家。。。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. 手把手带你搭建 Elasticsearch 集群
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. ANDROID数字签名及命令行启动执行APK程序
  7. Android——NDK开发(一)
  8. android 存储方法一SharedPreferences存储
  9. 说说Android上的断点续传下载

随机推荐

  1. 【原创】关于交换机端口链路类型Access、
  2. 3分钟掌握思科路由器密码破解
  3. 【原创】关于交换机端口链路类型Access、
  4. CVE-2019-16097 Harbor权限提升漏洞分析
  5. 商业电子邮件诈骗损失已达260亿美元!如何
  6. CCNA最实用的复习知识点(1)
  7. CCNA最实用的复习知识点(2)
  8. CCNA最实用的复习知识点(4)
  9. CCNA最实用的复习知识点(5)
  10. CVE-2019-12922:phpMyAdmin 0 Day漏洞