最佳化1--布局的最佳化,最佳化1--布局最佳化
1,減少布局的嵌套使用。刪除無用的控制項可層級。
有選擇的使用ViewGroup,比如RelativeLayout,在布局中如果可以使用LinearLayout則盡量選擇LineaLayout布局,如果可以使用FrameLayout則盡量使用FrameLayout則盡量使用幀布局,幀布局是五大布局中布局速度最快的布局,他不需要計算控制項的大小,只需要將控制項一層一層的蓋在一層上面即可。減少布局的嵌套層級。可以一層布局完成效果時,盡量使用一層布局嵌套完成效果。
2,當有布局複用時,抽取出來嗎,使用<include>標籤指定複用的布局,<merge>標籤,和ViewStub標籤
① include:
include中layout屬性指定一個外部布局檔案,通過該方式則不需要把這個布局檔案在該代碼中重複的寫一遍了。
若include指定了其他的android:layout_*的這種屬性,則layou_width和Layout_height必須存在。否則其他的無法生效
② merge標籤:
多和<include>標籤一起使用,減少布局的層級:如果當前布局是一個豎直方向的LinearLayout,這個時候如過被包含的布局檔案中也採用了LinearLayout也採用了垂直布局,則我們可以使用Merge標籤,減少布局的嵌套層級
③ ViewStub:
繼承自View,他非常輕量級 寬高都為0,因此他的本身不參與任何的布局和繪製過程。
它的意義在於按照需要載入所需的布局檔案,在實際開發中,有很多的布局檔案在正常的情況下不需要顯示,當需要其顯示的時候才會顯示。比如網路載入動畫的布局,這個時候沒有必要在整個介面初始化的時候將其載入進來,通過ViewStub就可以做到在使用的時候再載入。提高了程式效能。
<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/layout_network_error" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gavity="bottom" />
按需載入代碼: ((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);或者:View importPanel = ((ViewStub)findViewById(R.id.stub_import)).inflate();