使用include重用布局
尽管Android 支持各种小部件,来提供小且可以重用的交互元素,你可能还需要更大的,要求一个专门布局的重用组件。为了高效的重用整个布局,你能使用和标签在当前的布局中嵌入别的布局。
重用布局功能特别强大,因为它允许你创建可重用的复杂布局。例如,一个yes/no按钮面板,或者自定义带有描述字符串的滚动条。也就是说,在你的应用中任何跨越多个布局的相同元素都能被提取,单独管理,然后被包含在每个布局中。所以当你通过编写一个自定义View创建独特的UI组件的时候,通过重用一个布局实现它或许更容易 。
创建一个重用布局
如果你已经知道了你想重用的布局,创建一个新的XML文件定义它。例如,这里有一个自G-Kenya codelag的布局,它定义了标题栏,被包含在每个Activity中(titlebar.xml)。
<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>
在每个添加这个布局的布局中,根View决定了你想如何显示它。
使用标识
在你想添加这个重用组件的布局中,添加标签。例如,下面的布局来自G-Kenya codelab,它包含了上面提到的标题栏:
<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”/>
不管怎样,如果你在使用标签时覆盖布局属性,为了对别的布局属性生效,你必须都覆盖android:layout_height和android:layout_width属性。
使用标识
当一个布局包含另一个时,标签帮助消除在你的视图结构中冗余的视图组。例如,如果你的主布局是一个竖直的LinearLayout,在其中两个连续的视图可以在多个布局中重用,那么你使用的这两个重用的视图需要自己的根视图。无论如何,使用其它LinearLayout作为重用布局的根节点,会导致一个竖直LinearLayout嵌套一个竖直LinearLayout中。这个嵌入的LinearLayout不仅没到启到真正的作用,反而减缓了你的UI性能。
为了避免包含这样一个多余的视图组,你能使用元素替代这个重用布局的的根视图。例如:
<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>
现在,当你在其它的布局中包含这个布局的时候(使用标签),系统不顾这个元素并直接在这个布局中放置这两个按钮,取代标签。
使用include重用布局的更多相关文章
- android开发之merge结合include优化布局
merge结合include优化android布局,效果不知道,个人感觉使用上也有很大的局限,不过还是了解一下,记录下来. 布局文件都要有根节点,但android中的布局嵌套过多会造成性能问题,于是在 ...
- 公司6:JrVue重用布局
JrVue是我们基于element重新封装的一套组件库; 为了提高开发效率, 方便对代码的统一管理和维护, 我们提供了一些统一的页面布局, 以及项目常用的中小型模块 我在master新拉一个分支J ...
- android 界面设计基本知识
一个好的APP不仅有美观,好看的界面,更需要良好的性能和稳定性.作为一名开发人员,需要理解界面设计原则并写出优秀的界面设计代码. 本章主要讲述基本控件的使用,界面布局及一些常用的界面设计属性. 1.常 ...
- [原] Android持续优化 - 提高流畅度
一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此 ...
- Android中高级工程师面试题
https://www.cnblogs.com/huangjialin/p/8657565.html(存在不少答案错误,可参照知识点复习,答案不可全信) 上 https://www.cnblogs. ...
- 2018年Android面试题含答案--适合中高级
1.java中==和equals和hashCode的区别 基本数据类型的==比较的值相等. 类的==比较的内存的地址,即是否是同一个对象,在不覆盖equals的情况下,同比较内存地址,原实现也为 = ...
- 《Android应用性能优化》 第8章 图形
1.例子中 30个部件的xml setContentView 几乎占用了从onCreate() 到 onResume() 结束之前所有时间的99% 因为展开布局的开销很大.要尽量用不同的布局方式.比如 ...
- Android中的性能优化
由于手机硬件的限制,内存和CPU都无法像pc一样具有超大的内存,Android手机上,过多的使用内存,会容易导致oom,过多的使用CPU资源,会导致手机卡顿,甚至导致anr.我主要是从一下几部分进行优 ...
- 布局重用 include merge ViewStub
在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...
随机推荐
- 引用 自动化测试基础篇--Selenium简介
原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...
- 【Centos7裁剪】
#!/bin/sh rootdir=`pwd` rm -rf ${rootdir}/centos* KERNEL_DIR=${rootdir}/kernel ROOTFS_DIR=${rootdir} ...
- 关于java前端入门的一些简单的看法
html:是网页的骨架,静态网页初步的轮廓,简单粗糙,僵硬又没有美感.表单的标签<form>,里面的<input>很常用,里面有type属性等css:为了更加灵活,常与div一 ...
- vultr 上实现高可用冗余浮动公网IP出口(使用BIRD+BGP协议)High Availability on Vultr with Floating IP and BGP
官方文档: https://www.vultr.com/docs/high-availability-on-vultr-with-floating-ip-and-bgp https://www.vul ...
- [UE4]多播(广播)
只有服务器才有权限做广播,所以要判断确保是服务器端才做广播,有以下几种方法: 一.使用“Switch Has Authority”判断是否在服务器端 因为character一定是在服务器端创建出来的, ...
- DevExpress GridView删除行
int[] rows = gridView1.GetSelectedRows(); ) { if (DialogHelper.YesNo(this, "确认删除该记录?", &qu ...
- 开始创作自己的VR作品——VR故事叙述终极指南
转自:http://www.52vr.com/article-1870-1.html 在8月份,YouTube Space LA开展了“VR Creator Lab”的活动,为期三个月.参 ...
- 使用CacheCloud管理Redis实例
转载来源:http://www.ywnds.com/?p=10610 一.CacheCloud是什么? 最近在使用CacheCloud管理Redis,所以简单说一下,这里主要说一下我碰到的问题.Cac ...
- 第13课 lambda表达式
1. lambda的语法形式:[capture](params) opt -> ret {body;}; (1)capture为捕获列表 ①[].[&]和[=]分别表示不捕获.按引用捕获 ...
- scala语法在spark withScope上的应用
withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...