文档章节

Android复用布局标签优化

robertchao
 robertchao
发布于 2016/05/07 00:30
字数 713
阅读 3
收藏 0

在布局优化中,Androi的官方提到了这三种布局<include />、<merge />、<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一下怎么使用.

1、布局重用<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/layout_title"/>  
      
        <TextView android:layout_width=”match_parent”  
                  android:layout_height="wrap_content"  
                  android:text="@string/hello"  
                  android:padding="10dp" />  
        ...  
    </LinearLayout>  

1)<include />标签可以使用单独的layout属性,这个也是必须使用的。
2)标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖
3)在include标签中所有的android:layout_*都是有效的,前提是必须要写layout_width和layout_height两个属性。
4)布局中可以包含两个相同的include标签,引用时可以使用如下方法解决
    View bookmarks_container_2 = findViewById(R.id.bookmarks_favourite);
    bookmarks_container_2.findViewById(R.id.bookmarks_list);  

2、减少视图层级<merge />
<merge/>标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。<merge/>多用于替换FrameLayout或者当一个布局包含另一个时,<merge/>标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用<merge/>标签优化。

    <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 />标签),系统忽略<merge />节点并且直接添加两个Button。
更多<merge />介绍可以参考《Android Layout Tricks #3: Optimize by merging》

3、需要时使用<ViewStub />
<ViewStub />标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用<ViewStub />标签,以减少内存使用量,加快渲染速度。<ViewStub />是一个不可见的,大小为0的View。 <ViewStub />标签使用如下:

    <ViewStub  
        android:id="@+id/stub_import"  
        android:inflatedId="@+id/panel_stub"  
        android:layout="@layout/progress_overlay"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:layout_gravity="bottom" />  

当你想加载布局时,可以使用下面其中一种方法:
    ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);  
    // or  View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();  

当调用inflate()函数的时候,ViewStub被引用的资源替代,并且返回引用的view。 这样程序可以直接得到引用的view而不用再次调用函数findViewById()来查找了。
注:ViewStub目前有个缺陷就是还不支持 <merge /> 标签.
更多<ViewStub />标签介绍可以参考《Android Layout Tricks #3: Optimize with stubs》




本文转载自:http://blog.csdn.net/robertcpp/article/details/51325848

共有 人打赏支持
robertchao
粉丝 3
博文 55
码字总数 30285
作品 0
海淀
Android工程师
私信 提问
Android性能优化:这是一份详细的布局优化 指南(含、、)

前言 在 开发中,性能优化策略十分重要 本文主要讲解性能优化中的布局优化,希望你们会喜欢。 目录 /** 实例说明:在上述例子,在布局B中 通过标签引用布局C 此时:布局层级为 = RelativeLa...

Carson_Ho
2018/05/14
0
0
布局与控件(五)-Toast吐司与布局的抽象标签merge include ViewStub

版权声明:本文为博主原创文章,禁止转载,违者必究。 https://blog.csdn.net/anddlecn/article/details/51566643 第5节 Toast 5.1 使用效果 用来向用户弹出一个提示框,然后自动消失,就像这...

anddlecn
2016/06/02
0
0
Android应用布局技巧:创建可复用的UI组件

Android平台提供了广泛的UI可视组件---widget,把这些小的可视的构件组合到一起,就可以给用户提供复杂而有用的界面。但是,应用程序经常需要一些高级可视组件,要满足这样的需求,并要达到高...

长平狐
2012/10/16
740
0
Android性能优化之布局优化

最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节...

Trinea
2013/08/13
287
1
android UI优化 - 标签减少重复布局代码

原文链接 更多教程 你将学到 标签简介 你一定经常遇到相似度很高的UI需求:比如同一种标题栏、同一个样式的弹窗、按钮...等等。 每次都重复的写一样的布局代码么? 答案肯定是:NO !!! 提...

TryEnough
01/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 扩展lv

相关概念 逻辑卷可以实现硬盘空间的动态划分和管理。 1】 物理卷 LV 处于最低层,可以是物理硬盘上的分区,也可以是整个物理硬盘 2】 卷组 VG 卷组建立在物理卷之上,一个卷组至少要包括一个...

hnairdb
16分钟前
1
0
如何快速定位Ruby函数源码

如何快速定位Ruby函数源码 1、gem gem which sidekiq 2、bundle bundle show redis 3、CTags Sublime extend ActiveSupport::Concernrescue_fromcurrent_company.cc_ad_tasks.creat......

mingle
17分钟前
1
0
基于 DataLakeAnalytics 的数据湖实践

随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析...

阿里云云栖社区
18分钟前
1
0
word文档处理成富文本生成sql语句导入mysql

问题:需要将大量的已存在的word文档导入到web项目里在网站展示,不可能通过编辑录入的方式处理,通过程序实现。 解决思路:通过读取word文档处理成html,再获取html富文本内容,拼接成sql,...

S三少S
25分钟前
37
0
WAF开放规则定义权:专家策略+用户自定义策略=Web安全

在第一期“漫说安全”栏目中,我们用四格漫画的形式介绍了基于深度学习的阿里云WAF到底智能在哪里,能帮客户解决什么问题。 在今天的这期栏目里,我们依然通过漫画这种通俗易懂的方式,与大家...

迷你芊宝宝
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部