Android 有提供 3 種布局優(yōu)化的方式
1 include
Android 有提供 <include/> 來解決重復(fù) UI 的問題奴艾,但是貪圖便利都直接黏貼代碼,想說快速而且簡單内斯。但檢查代碼后發(fā)現(xiàn)蕴潦,寫在 UI 頂部的返回按鈕和標(biāo)題名稱的 View,幾乎都有重復(fù)使用 UI 的問題俘闯。所以利用 include標(biāo)簽來解決這個問題潭苞。
在研究之前有幾個疑惑
- 如果單純只是顯示在畫面上,那么不用初始化和宣告并沒有問題备徐,直接在 .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 />標(biāo)簽若指定了ID屬性衍菱,而加進來的 Layout 也定義了ID,則 Layout 的ID會被覆蓋肩豁。
2 merge 減少視圖層級
這個標(biāo)簽再研究之前脊串,并不了解它的功用辫呻。我的看法是 <merge/> 只是單純的簡化 .xml 里代碼的數(shù)量,可以與<include/>搭配使用琼锋,但其實不然放闺。以上的狀況單純發(fā)生在不需要Layout框架時。
而另外一種狀況是缕坎,當(dāng)原本Layout 使用的是 LinearLayout 并且 merge標(biāo)簽里也是使用 LinearLayout怖侦,如此便可以簡化LinearLayout不用加入,便可以加速程序的執(zhí)行谜叹。
用例子解釋
activity_sample1.xml
<LinearLayout
<TextView
…中間省略
/>
/>
activity_sample2.xml
<LinearLayout
<TextView
…中間省略
/>
/>
activirt_main.xml
<LinearLayout
<TextView
…中間省略
/>
/>
當(dāng)遇到需要把 activity_sample1 及 activity_sample2 加入時匾寝,將此兩個xml檔改成merge,減少重復(fù)相同布局
3 ViewStub
最大的優(yōu)點是當(dāng)你需要時才會加載荷腊,使用他并不會影響 UI 初始化時的性能艳悔。
補充 :不支持merge標(biāo)簽
以上是整理出來的一些筆記,如果有哪個部分有問題女仰,歡迎留言猜年。