布局与控件 第6节 布局的抽象标签-merge include ViewStub

更新时间 修改意见
2016-08-02 陈敏

第6节 布局的抽象标签-merge include ViewStub

include标签、merge标签,以及ViewStub标签是安卓布局使用的抽象标签。它们并不代表某个具体的布局或者控件,而是起布局的辅助作用,提高布局执行的效率和易用性。

例如,对于那些会重复使用到的布局结构,可以它们放到一个单独的layout文件中。当我们在任何要使用这个布局的地方,就通过复用的方法,将它包含到新的布局文件中。

假设下面这个布局结构会被经常的使用,我们就可以将它单独定义到一个独立的布局文件reuse.xml

6.1 include标签

当别的布局文件main_layout.xml,要使用上面被独立出来的布局时,就可以用标签把这个布局包含进来。在标签的layout属性中,指定要复用的布局的id就可以了。

例如main_layout.xml使用标签,

此时main_layout.xml实际上,就变成了,

6.2 merge标签

再来看看merge标签,将reuse.xml中的FrameLayout修改成merge

main_layout.xml继续使用标签,

此时main_layout.xml实际就变成了,

与之前相比,少了FrameLayout一层。在布局时少一个层次的包裹,可以增加布局的效率。

6.3 ViewStub标签

这是一个布局的占位符。当一个布局包含了这种标签,它并不会加载这个标签的内容,而是在需要的时候,通过代码来动态加载。

例如,一个布局main_layout.xml里面,有一个ProgressBar,布局被加载时,这个ProgressBar就会被创建出来,

如果我们将ProgressBar放到一个单独的布局文件progress_layout.xml当中,

然后main_layout.xml中使用ViewStub引用这个布局,

布局被加载时,这个ProgressBar并不会被创建出来。使用如下方式,就可以把ViewStub,替换成android:layout指定的布局,

  1. 在代码中使用setVisibility()函数,

  2. 在代码中使用inflate()函数,

替换之后,ViewStub就被从布局当中移除了,这个布局就变成了,


/**************************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/
**************************************************************************/