在我们开发Android布局时,经常会有很多的布局是相同的,这个时候我们可以通过<include/>和<merge/>标签实现将复杂的布局包含在需要的布局中,减少重复代码的编写。

1. 创建一个可以重复使用的布局:

如下代码描述在应用中每个acitivity都出现的顶栏titlebar.xml

[java] view plaincopy
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width=”match_parent”
  3. android:layout_height="wrap_content"
  4. android:background="@color/titlebar_bg">
  5. <ImageView android:id="@+id/title"
  6. android:layout_width="wrap_content"
  7. android:layout_height="wrap_content"
  8. android:src="@drawable/gafricalogo" />
  9. </FrameLayout>

上面的根布局(root view)即frameLayout会出现在之后插入的地方。

2. 使用<include/>标签:

在应用中的一个activity的布局中顶栏就是如上的布局,那么我们就可以include上面的titlebar.xml达到复用的效果,布局代码如下

[java] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:orientation="vertical"
  3. android:layout_width=”match_parent”
  4. android:layout_height=”match_parent”
  5. android:background="@color/app_bg"
  6. android:gravity="center_horizontal">
  7. <include  android:id="@+id/new_title"
  8. layout="@layout/titlebar"/>
  9. <TextView android:layout_width=”match_parent”
  10. android:layout_height="wrap_content"
  11. android:text="@string/hello"
  12. android:padding="10dp" />
  13. ...
  14. </LinearLayout>

通过取得元素的id,我们可以修改include标签中元素的属性,下面的例子为在actiivty中修改titlebar中的图片:

[java] view plaincopy
  1. private View mTitleBar = null;
  2. private ImageView mTitleImageView = null;
  3. mTitleBar = findViewById(R.id.new_title);
  4. mTitleImageView = (ImageView)mTitleBar.findViewById(R.id.title);
  5. mTitleImageView.setImageResource(R.drawable.logo);

在使用include标签时,我们可以覆写插入布局root view的属性(所有的android:layout_*属性)

[java] view plaincopy
  1. <include android:id=”@+id/news_title”
  2. android:layout_width=”match_parent”
  3. android:layout_height=”match_parent”
  4. layout=”@layout/title”/>

如果需要覆写插入布局root view的属性,则必须制定android:layout_width和android:layout_height这两个属性以使其它的覆写属性生效。

3. 使用<merge/>标签

merge标签用来消除我们在include一个布局到另一个布局时所产生的冗余view group。比如现在很多布局中会有两个连续的Button,于是我们将这两个连续的Button做成可复用布局(re-usable layout)。在使用include标签时我们必须先将这两个Button用一个view group比如LinearLayout组织在一起然后供其它布局使用,如果是include的地方也是LiearLayout就会造成有两层连续的LiearLayout,除了降低UI性能没有任何好处。这个时候我们就可以使用<merge/>标签作为可复用布局的root view来避免这个问题。

[java] view plaincopy
  1. <merge xmlns:android="http://schemas.android.com/apk/res/android">
  2. <Button
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:text="@string/add"/>
  6. <Button
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="@string/delete"/>
  10. </merge>

当我们用<include/>标签复用上述代码时,系统会忽略merge元素,直接将两个连续的Button放在<include/>标签所在处。

在android布局中使用include和merge标签相关推荐

  1. android布局中使用include及需注意点

    在android布局中,使用include,将另一个xml文件引入,可作为布局的一部分,但在使用include时,需注意以下问题:一.使用include引入如现有标题栏布局block_header.x ...

  2. Android布局优化之include、merge、ViewStub

    include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...

  3. android layout include merge,Android 布局优化之include与merge

    Android 官方提供了三个用来优化布局的标签,分别是include.merge与ViewStub,其中ViewStub是动态加载视图到内存,大家可以查阅:Android UI布局优化之ViewSt ...

  4. Android布局文件之 include 详细介绍

    Android布局文件之 include 详细介绍 include简介 众所周知,include就是在一个布局中,导入另一个布局文件. 优势是:相同的页面只需写一次,提高了共通布局的复用性. 下面我们 ...

  5. android 布局 站位符,基于android布局中的常用占位符介绍

    大家在做布局文件是肯定会遇到过下面的这种情况 填充出现问题,所以需要用到占位符规范填充 汉字常用占位符: android:layout_width="wrap_content" a ...

  6. Android布局中的空格以及占一个汉字宽度的空格的实现

    在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格: 窄空格:  一个汉字宽度的空格:   [用两个空格(  )占一个汉字的宽度时,两个空格比一 ...

  7. android 多个占位符,基于android布局中的常用占位符介绍

    大家在做布局文件是肯定会遇到过下面的这种情况 填充出现问题,所以需要用到占位符规范填充 汉字常用占位符: android:layout_width="wrap_content" a ...

  8. 详解Android布局中gravity与layout_gravity属性

    在android布局中,我们经常会用到"重心"-gravity这个属性.但是gravity有不同的类型: gravity layout_gravity 相对布局中的layout_c ...

  9. Android布局中margin与padding的区别

    我们知道Android开发不仅仅有代码的动态控制,而且还涉及到布局的静态搭建(xml).几乎在每一个xml文件中,我们总会看到margin和padding这两个属性,今天让我们初步探究一下它们之间的区 ...

最新文章

  1. 10大机器学习开源项目推荐(Github平均star为1385)
  2. 构建之法读书笔记之五
  3. JavaWeb学习之Spring框架(一)
  4. java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
  5. 在tnsnames.ora中配置监听
  6. Node.js中的回调解析
  7. Chapter9:顺序容器
  8. 前端学习(1736):前端系列javascript之创建webpack与loader使用
  9. Java Server Page
  10. kaggle比赛语言java_Kaggle调查:2018年数据科学家最常用(和最推荐)的编程语言榜单...
  11. 3 天开发物联网应用!腾讯云 IoT 超级小程序来了
  12. AtCoder Beginner Contest 132 解题报告
  13. 学习是一件高尚而孤独的事情
  14. hbase 使用lzo_【hbase】Hbase最佳实践
  15. javascript延时调用函数
  16. python二级题库(百分之九十原题) 刷题软件推荐 第二套
  17. iOS 中可能用到的数学公式(绝对值、平方、取整、正余弦)
  18. 不可重复读和幻读的区别(悲观锁和乐观锁)
  19. java动态规划凑硬币问题_动态规划 凑硬币问题
  20. 有些人的微信字体可以变成蓝色,点进去就可以知道答案,这是为什么呢?

热门文章

  1. netcore权限控制_记录这两年是如何一步一步转型到.net core+k8s
  2. python中的1怎么用的_python中的[:-1]和[::-1]的具体使用
  3. mybatis-plus 多列映射成数组_JavaScript 为什么需要类数组
  4. vue 监听表格里的数据变化_vue中监听数据变化 watch
  5. illegalargumentexception是什么异常_线程出现异常!应该如何处理?
  6. 中国文学发展史思维导图
  7. ANACONDA安装pytorch后Pycharm无法识别到解释器
  8. VMware卸载虚拟机
  9. 计算机科技协会竞选书,加入计算机协会申请书
  10. 自动化运维之CentOS7下PXE+Kickstart+DHCP+TFTP+HTTP无人值守安装系统