1.使用系統為我們提供了幾個抽象的標簽 ①include:重用 ②viewstub:按需載入 註意: ③merge:減少佈局層數 ...
1.使用系統為我們提供了幾個抽象的標簽
①include:重用
include中layout屬性指定一個外部佈局文件,通過該方式則不需要把這個佈局文件在該代碼中重覆的寫一遍了。 若include指定了其他的android:layout_*的這種屬性,則layou_width和Layout_height必須存在。否則其他的無法生效
②viewstub:按需載入
viewstub標簽和include標簽很相似,都是使用layout屬性來載入一個佈局。不同之處是include標簽用來重用佈局,該佈局會在App啟動載入時被載入進記憶體。而viewstub標簽所引用的佈局是不會被載入出來的,只有當你在某個時間需要使用時才會被載入出來,從而在解析layout時節省了cpu載入時間和記憶體的占用。 它的意義在於按照需要載入所需的佈局文件,在實際開發中,有很多的佈局文件在正常的情況下不需要顯示,當需要其顯示的時候才會顯示。比如網路載入動畫的佈局,這個時候沒有必要在整個界面初始化的時候將其載入進來,通過ViewStub就可以做到在使用的時候再載入。提高了程式性能。 按需載入代碼: ((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); 或者: View importPanel = ((ViewStub)findViewById(R.id.stub_import)).inflate();
註意:
之前看到網上很多朋友說將View的可見性設置為gone。該View同樣不會被載入到記憶體。其實這種說法是錯誤的。從Android源碼可以知道,即使將View的visiablity設置為gone,View同樣會被載入的記憶體資源當中。即只有隻有ViewStub載入的layout在App啟動後才不會被載入到記憶體資源。
③merge:減少佈局層數
merge標簽用來取消layout的層級的顯示。大家都知道,Android頂級佈局DecorView的根佈局是讓FrameLayout。此時在我們的佈局中如果我們使用FrameLayout,就會造成佈局節點的層級疊加重覆繪製。Android為我們提供了一個叫做hierarchy viewer來查看佈局節點信息。該工具在sdk/tools目錄下。