簡單或複雜的問題都需要時常考慮如何優化資源的分配。比如一個功能很簡單的應用程序,它會調用一些我們常用的對話框或者輸入面板,這需要採用統一的方式來針對不同的應用程序制定統一標準。
當我們面對Android UI優化時,有必要繼續考慮資源複用。手機開發給我們的直觀感覺是運行其上的軟件應該儘可能的達到資源高效利用的極致,而不能像開發PC機那樣,似乎有用之不盡的資源。
定義Android Layout(XML)時,有四個比較特別的標籤是非常重要的,其中有三個是與資源複用有關,分別是 <viewStub
/>, <requestFocus />
,
<merge />
and <include />。可是以往我們所接觸的案例或者官方文檔的例子都沒有着重去介紹這些標籤的重要性。
- <viewStub />: 此標籤可以使UI在特殊情況下,直觀效果類似於設置View的不可見性,但是其更大的(R)意義在於被這個標籤所包裹的Views在默認狀態下不會佔用任何內存空間。viewStub通過include從外部導入Views元素。
- 用法:通過android:layout來指定所包含的內容。默認情況下,ViewStub所包含的標籤都屬於visibility=GONE。viewStub通過方法inflate()來召喚系統加載其內部的Views。
<ViewStub android:id="@+id/stub" android:inflatedId="@+id/subTree" android:layout="@layout/mySubTree" android:layout_width="120dip" android:layout_height="40dip" />
- 用法:通過android:layout來指定所包含的內容。默認情況下,ViewStub所包含的標籤都屬於visibility=GONE。viewStub通過方法inflate()來召喚系統加載其內部的Views。
- <merge />: 將在下一篇做詳細介紹。
- <include />:可以通過這個標籤直接加載外部的xml到當前結構中,是複用UI資源的常用標籤。
- 用法:將需要複用xml文件路徑賦予include標籤的Layout屬性。
<include android:id="@+id/cell1" layout="@layout/ar01" /> <include android:layout_width="fill_parent" layout="@layout/ar02" />
- 用法:將需要複用xml文件路徑賦予include標籤的Layout屬性。
- <requestFocus />: 標籤用於指定屏幕內的焦點View。
- 用法: 將標籤置於Views標籤內部
<EditText id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" android:paddingBottom="4"> <requestFocus /> </EditText>
- 用法: 將標籤置於Views標籤內部
參考資料:
http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html
如果以上內容存在錯誤或者遺漏之處,請給予指正,非常感謝。