虽然 Android 提供很多小的可重用的交互组件,你仍然可能需要重用复杂一点的组件,这也许会用到 Layout。为了高效重用整个的 Layout,你可以使用 和 标签把其他 Layout 嵌入当前 Layout。

重用 Layout 非常强大,它让你可以创建复杂的可重用 Layout。比如,一个 yes/no 按钮面板,或者带有文字的自定义进度条。这也意味着,任何在多个 Layout 中重复出现的元素可以被提取出来,被单独管理,再添加到 Layout 中。所以,虽然可以添加一个自定义 View 来实现单独的 UI 组件,你可以更简单的直接重用某个 Layout 文件。

创建可重用 Layout

如果你已经知道你需要重用的 Layout,就先创建一个新的 XML 文件并定义 Layout 。比如,以下是一个来自 G-Kenya codelab 的 Layout,定义了一个需要添加到每个 Activity 中的标题栏(titlebar.xml):

android:layout_width=”match_parent”

android:layout_height="wrap_content"

android:background="@color/titlebar_bg">

android:layout_height="wrap_content"

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

根节点 View 就是你想添加入的 Layout 类型。

使用标签

使用 标签,可以在 Layout 中添加可重用的组件。比如,这里有一个来自 G-Kenya codelab 的 Layout 需要包含上面的那个标题栏:

android:orientation="vertical"

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:background="@color/app_bg"

android:gravity="center_horizontal">

android:layout_height="wrap_content"

android:text="@string/hello"

android:padding="10dp" />

...

你也可以覆写被添加的 Layout 的所有 Layout 参数(任何 android:layout_* 属性),通过在 中声明他们来完成。比如:

android:layout_width="match_parent"

android:layout_height="match_parent"

layout="@layout/title"/>

然而,如果你要在 中覆写某些属性,你必须先覆写 android:layout_height 和 android:layout_width。

使用标签

标签在你嵌套 Layout 时取消了 UI 层级中冗余的 ViewGroup 。比如,如果你有一个 Layout 是一个竖直方向的 LinearLayout,其中包含两个连续的 View 可以在别的 Layout 中重用,那么你会做一个 LinearLayout 来包含这两个 View ,以便重用。不过,当使用一个 LinearLayout 作为另一个 LinearLayout 的根节点时,这种嵌套 LinearLayout 的方式除了减慢你的 UI 性能外没有任何意义。

为了避免这种情况,你可以用 元素来替代可重用 Layout 的根节点。例如:

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/add"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/delete"/>

现在,当你要将这个 Layout 包含到另一个 Layout 中时(并且使用了 标签),系统会忽略 标签,直接把两个 Button 放到 Layout 中 的所在位置。

android 组件重用,Android提高显示布局文件的性能,使用include标签重用layouts相关推荐

  1. 【Android Training - Performance】提高显示布局文件的性能[Lesson 3 - 按需载入视图(ViewStub的使用方法)]

    Loading Views On Demand [按需载入视图] 某些时候,我们需要一些很复杂的视图却仅仅很少用到.如果我们在它仅仅需要的时候再载入,这样可以减少内存的使用并且给用户带来流畅的体验. ...

  2. Android 开发之旅:深入分析布局文件又是“Hello World!”

    引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实践,我们拿起手术刀对默认的"Hello World!"程序进行了3个手术,我们清楚了"Hell ...

  3. Android使用addView动态加载布局文件

    第一步,要获取要将动态加载内容置入的容器 relativeLayout RelativeLayout relativeLayout = (RelativeLayout) findViewById(R. ...

  4. android 组件 线程,Android UI线程和非UI线程

    UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的 ...

  5. android 组件可见,android界面控件可见性方法setVisibility()3个可选参数(visible,invisible,gone)的区别...

    setVisibility()有三个参数:visible, invisible,gone 1. visible :设置为可见 2. invisible : 设置为不可见,但是保留它在父控件上所占的空间 ...

  6. android组件圆角,Android实现圆角控件

    Android实现圆角控件 在Android开发过程中,控件的使用是最常见.最基本的.但是我们都知道,在Android中的控件都是矩形的,而在实际项目中,我们的UI设计师经常会使用一些圆角的控件.那么 ...

  7. android 组件大小,Android编程获取组件尺寸大小的方法

    本文实例讲述了Android编程获取组件尺寸大小的方法.分享给大家供大家参考,具体如下: 在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽 ...

  8. android组件权限,Android中Permission权限机制的具体使用

    由上篇Android Permission权限机制引子,我们知道Android 通过在每台设备上实施了基于权限的安全策略来处理安全问题,采用权限来限制安装应用程序的能力.本篇文章继续来探讨和Andro ...

  9. android组件设计,Android组件化开发路由的设计实践

    调研了一下目前的路由框架,ARouter(阿里的),ActivityRouter都使用了apt技术 编译时注解,个人想法是一口吃不成胖子,先做个比较实用的. VpRouter路由框架主要应用于组件化开 ...

  10. android组件启动,Android四大组件Service之StartService启动

    对于Service两种方式在概述里已经介绍了,下面是学习是StartService的代码实例. service启动代码: package com.example.service01; import a ...

最新文章

  1. extern C __declspec(dllexport) __declspec(dllimport) 和 def
  2. 20)内联函数(其实,我不懂)
  3. linux停止nodejs,node.js – 在linux重启后,nodejs消失了
  4. 笔记-软考高项-错题笔记汇总1
  5. socket 编程入门教程(一)TCP server 端:4、构造函数涉及的概念
  6. 互联网晚报 | 2月25日 星期五 | 元宇宙概念,热度显著下降;​腾讯正洽谈落地“东数西算”大湾区枢纽韶关数据中心集群...
  7. ActiveMQ学习总结(5)——Java消息服务JMS详解
  8. 如何用来客商城改造成种草商城
  9. 一文告诉你16条微信小程序推广渠道大全
  10. OCR识别新能源车牌的原理
  11. Linux 异常:The following signatures couldn‘t be verified because the public key is not available
  12. 大数据图解美英法空袭叙利亚,都动用了哪些装备?
  13. 读《解忧杂货店》有感
  14. vue中 给v-for渲染的元素动态添加移除类名
  15. 母牛生小牛java_Java实现:工厂有一头母牛,一年生一头小母牛,小母牛五年后可以生小牛,问20年工厂有多少头牛?...
  16. Attribute value is quoted with “ which must be escaped when used within the value 问题解决
  17. CCF认证2019031-小中大
  18. Linux(一)之相关介绍与安装
  19. DO WE NEED ANISOTROPIC GRAPH NEURALNETWORKS?(EGConv)
  20. ZUCC_BB平台-Quiz B-3-7-答案

热门文章

  1. Java中parseInt()和valueOf(),toString()的区别
  2. 乐迪机器人正确操作_乐迪智能早教机器人好用吗 乐迪智能早教机器人使用测评...
  3. 拓扑排序:LC 207. 课程表 210. 课程表 II
  4. his提供哪些服务_品牌战略咨询能为企业提供哪些服务
  5. 前后台进程的本质区别
  6. python 类继承 baseclass_Python:Dataclass继承自base Dataclass,如何将值从base升级到新类?...
  7. SLAM--求解2D-2D图像间的运动
  8. linux内存和缓冲区,Linux上怎么清除缓存、缓冲区和交换区空间?
  9. 数据集:波士顿地区房价预测
  10. 文件怎么更新_干货!Win10更新总失败?学会这三招搞定它