原文地址:http://android.xsoftlab.net/training/improving-layouts/reusing-layouts.html

尽管Android提供了种类繁多的常用控件,但是有时你可能希望重用一些比较复杂的布局。如果要重用这些布局,可以使用< include/>标签与< merge/>标签,它们可将一个布局嵌入进另一个布局中。

可重用布局这项功能特别强大,它可以使你创建那些复杂的可重用布局。比方说,可以用来创建一个含有yes和no按钮的容器或者一个含有progressBar及一个文本框的容器。它还意味着程序可以对这些布局进行单独控制。所以,虽然说你可以通过自定义View的方式来实现更为复杂的UI组件,但是重用布局的方法更简便一些。

创建一个可重用的布局

如果你已经知道哪一个布局需要重用,那么就创建一个新的xml文件用来定义这个布局。下面就定义了一个ActionBar的布局文件,众所周知,ActionBar是会在每个Activity中统一出现的:

<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="@drawable/gafricalogo" />
</FrameLayout>

使用< include/>标签

在希望添加重用布局的布局内,添加< 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:background="@color/app_bg"android:gravity="center_horizontal"><include layout="@layout/titlebar"/><TextView android:layout_width=”match_parent”android:layout_height="wrap_content"android:text="@string/hello"android:padding="10dp" />...
</LinearLayout>

你也可以重写布局的参数,但只仅限于以android:layout_*开头的布局参数。就像下面这样:

<include android:id=”@+id/news_title”android:layout_width=”match_parent”android:layout_height=”match_parent”layout=”@layout/title”/>

如果你要重写< include>标签指定布局的布局属性,那么必须重写android:layout_height及android:layout_width这两个属性,以便使其它属性的作用生效。

使用< merge>标签

在将一个布局内嵌进另一个布局时,< merge>标签可以帮助消除冗余的View容器。举个例子,如果你的主布局是一个垂直的LinearLayout,在它的内部含有两个View,并且这两个View需要在多个布局中重用,那么重用这两个View的布局需要有一个root View。然而,使用单独的LinearLayout作为这个root View会导致在一个垂直的LinearLayout中又嵌了一个垂直的LinearLayout。其实这个内嵌的LinearLayout并不是我们真正想要的,此外它还会降低UI性能。

为了避免出现这种冗杂的View容器,你可以使用< merge>标签作为这两个View的root View:

<merge xmlns:android="http://schemas.android.com/apk/res/android"><Button
        android:layout_width="fill_parent" android:layout_height="wrap_content"android:text="@string/add"/><Button
        android:layout_width="fill_parent" android:layout_height="wrap_content"android:text="@string/delete"/>
</merge>

那么现在再使用这个布局的时候,系统会自动忽略< merge>标签,并会将两个Button View直接加入到布局< include/>标签所指定的位置。

Android官方开发文档Training系列课程中文版:布局性能优化之布局复用相关推荐

  1. Android官方开发文档Training系列课程中文版:性能优化建议

    原文地址:http://android.xsoftlab.net/training/articles/perf-tips.html 本篇文章主要介绍那些可以提升整体性能的微小优化点.它与那些能突然改观 ...

  2. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  3. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  4. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  5. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  6. Android官方开发文档Training系列课程中文版:打印内容之HTML文档打印

    原文地址:http://android.xsoftlab.net/training/printing/html-docs.html 在Android中打印内容要比打印照片要复杂一些,它要求将文本与图像 ...

  7. Android官方开发文档Training系列课程中文版:布局性能优化之布局层级优化

    原文地址:http://android.xsoftlab.net/training/improving-layouts/index.html 引言 布局是直接影响用户体验的关键部分.如果实现的不好,那 ...

  8. Android官方开发文档Training系列课程中文版:管理系统UI之隐藏状态条

    原文地址:http://android.xsoftlab.net/training/system-ui/status.html 这节课将会介绍如何隐藏不同的版本的状态条.隐藏状态条可以使内容展示区域更 ...

  9. Android官方开发文档Training系列课程中文版:创建自定义View之View的优化

    原文地址:http://android.xsoftlab.net/training/custom-views/optimizing-view.html 现在已经完成了一个拥有良好设计的View,它即可 ...

  10. Android官方开发文档Training系列课程中文版:多样屏幕之实现自适应UI

    原文地址:http://android.xsoftlab.net/training/multiscreen/adaptui.html 基于程序当前所显示的布局来说,UI流程可能会有所不同.比如说,如果 ...

最新文章

  1. linux开发教程,Java基础面试题(2)
  2. SQL语句获取数据库名、所有表名、所有字段名及字段类型
  3. hihoCoder #1445 : 后缀自动机二·重复旋律5
  4. 运放电路分析_运放参数的详细解释和分析part4运放噪声
  5. 复习 2 个月拿下大厂 Offer,Java 面试指南带你通关跳槽季
  6. POJ 3090 (欧拉函数) Visible Lattice Points
  7. 动态分配IP之dhcp服务
  8. 折线图_手把手教你用ECharts画折线图
  9. 逻辑回归与梯度下降法
  10. numpy教程:ndarray属性、内建函数及其运算、迭代
  11. 2019年IT及大数据行业趋势
  12. 2022搜狐校园NLP算法大赛情感分析第一名方案理解和复现
  13. WebSphere概述
  14. 云计算与大片:基于阿里云的渲染农场
  15. 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
  16. 少室山论道——天下武功
  17. 为什么php不开源,php开不开源
  18. 游戏服务器 数据同步方案
  19. shell 生成指定范围随机数与随机字符串
  20. 【云原生】设备云之前端可视化编程基础

热门文章

  1. 纪念音视频界前辈-雷霄骅
  2. 2021年,这是你们收到的第一份礼物
  3. linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
  4. oracle入库的速度能到多少_多线程能提高Oracle的入库速度吗
  5. 小型机oracle命令,Oracle小型机如何选型
  6. python制作聊天机器人原理_用 Python 来做一个聊天机器人吧!(一)
  7. AntDesign组件库的使用
  8. LeetCode 1864. 构成交替字符串需要的最小交换次数
  9. LeetCode 1710. 卡车上的最大单元数(排序,模拟)
  10. LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)