博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 布局巧用之include、merge、ViewStub
阅读量:5876 次
发布时间:2019-06-19

本文共 1869 字,大约阅读时间需要 6 分钟。

原文链接:

相信大家经常听到includemergeViewStub这样的标签,官方也提到这三种布局可用于布局的优化。今天就介绍下这三种布局的使用,记录下来,便于后续app中的使用。

include布局重用

app开发过程中,会遇到不同页面里有相同的布局,这时我们可以将这些通用的布局提取出来到一个单独的layout文件里,再使用<include>标签引入到相应的页面布局文件里,主要通过includelayout属性引用。

举个栗子
include的布局:

复制代码

activity的布局:

复制代码

这个标签在日常工作使用还是很常见的。这里有几点需要注意下:

1、如果给include标签 和 include所加载的布局 都添加id的话,那么id要保持一致,如例子中都是container,否则是在代码中获取不到RelativeLayout容器的。 当然我们可以避免这样的问题,只需要给其中一项添加id属性就可以。

2、include布局里元素的id 要和 include所在页面布局里的其他元素id 不同,如例子中的两个textview,如果把id设置相同了,程序运行起来并不会报错,但是textview的赋值只会赋值给其中的一个。

3、如果需要给include标签设置位置属性的话,如例子中的layout_belowlayout_marginTop,这时候 必须 同时设置include标签的宽高属性layout_widthlayout_height,否则编译器是会报错的。一般情况不需要设置include的其他属性,直接加载布局文件 <include layout="@layout/...."/>

4、布局中可以包含两个相同的include标签,如下代码所示 两个include都加载layout="@layout/include_layout"

复制代码

可以设置不同include的id属性,引用的时候如下可以正常显示:

View view = findViewById(R.id.container2);TextView textView = view.findViewById(R.id.tv);textView.setText("这里是来自 第二个 include布局");复制代码

merge减少视图层级

merge标签可用于减少视图层级来优化布局,可以配合include使用,如果include标签的父布局 和 include布局的根容器是相同类型的,那么根容器的可以使用merge代替。

页面布局

复制代码

先看没有使用merge的:

复制代码

看下view层的结构:

再看使用了merge的:

复制代码

view层结构:

可以看到对比,减少了一层的
LinearLayout的嵌套,需要注意的是使用
merge的布局,在
include的标签设置距离属性没有生效,可以将一些间距属性设置到
include布局里元素上,具体看项目需求使用。

ViewStub按需加载

按需加载 顾名思义需要的时候再去加载,不需要的时候可以不用加载,节约内存使用。通常情况我们会使用setVisibility方法来控制视图的显示和隐藏,但是这种情况视图已经加载了。

比如app中页面里某个布局只需要在特定的情况下才显示,其余情况下可以不用加载显示,这时候可以使用ViewStub
layout属性是需要加载布局

复制代码

需要注意的是 ViewStubinflate()方法只能被调用一次,一旦调用后,ViewStub将从视图中移除,被对应的layout布局取代,同时会保留ViewStub上设置的属性效果。

ViewStub viewstub = findViewById(R.id.viewstub);viewstub.inflate();复制代码

这篇关于includemergeViewStub的使用就介绍到这里了,具体使用情况还得视项目而定。

最后附上github地址

欢迎关注我的博客:

更多精彩欢迎关注微信号:春风十里不如认识你

转载地址:http://zckix.baihongyu.com/

你可能感兴趣的文章
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
远程协助
查看>>