Android 有提供 3 种布局优化的方式
1 include
Android 有提供 <include/> 来解决重复 UI 的问题,但是贪图便利都直接黏贴代码,想说快速而且简单。但检查代码后发现,写在 UI 顶部的返回按钮和标题名称的 View,几乎都有重复使用 UI 的问题。所以利用 include标签来解决这个问题。
在研究之前有几个疑惑
- 如果单纯只是显示在画面上,那么不用初始化和宣告并没有问题,直接在 .xml 档中完成编辑即可。
例子 : <include layout="@layout/所使用Layout "/>
那么如果有类似 Button 或 EditText 等组件时,该如何使用这些组件? - 同时套用多个<include/>时该如何使用
其实两个问题思路是相同的
.xml 中,宣告ID,只要是android:layout_* 这种类型属性都是有效的,前提是必须要写 layout_width 和 layout_height 两个属性。
<include
android:id="@+id/命名"
layout="@layout/所使用Layout" />
代码中
View (SampleView)命名的View = findViewById(命名);
SampleView.findViewById(组件id);
补充 : <include />标签若指定了ID属性,而加进来的 Layout 也定义了ID,则 Layout 的ID会被覆盖。
2 merge 减少视图层级
这个标签再研究之前,并不了解它的功用。我的看法是 <merge/> 只是单纯的简化 .xml 里代码的数量,可以与<include/>搭配使用,但其实不然。以上的状况单纯发生在不需要Layout框架时。
而另外一种状况是,当原本Layout 使用的是 LinearLayout 并且 merge标签里也是使用 LinearLayout,如此便可以简化LinearLayout不用加入,便可以加速程序的执行。
用例子解释
activity_sample1.xml
<LinearLayout
<TextView
…中间省略
/>
/>
activity_sample2.xml
<LinearLayout
<TextView
…中间省略
/>
/>
activirt_main.xml
<LinearLayout
<TextView
…中间省略
/>
/>
当遇到需要把 activity_sample1 及 activity_sample2 加入时,将此两个xml檔改成merge,减少重复相同布局
3 ViewStub
最大的优点是当你需要时才会加载,使用他并不会影响 UI 初始化时的性能。
补充 :不支持merge标签
以上是整理出来的一些笔记,如果有哪个部分有问题,欢迎留言。