標籤:情況 merge 效率 include relative measure views 代碼 span
一、關於RelativeLayout和LinearLayout的使用
由源碼可以知道,RelativeLayout需要對其子View進行兩次measure過程,而LinearLayout只需一次measure過程,我們知道,onMeasure的耗時越長效率就越低,但是如果LinearLayout中有weight屬性,也需要進行兩次measure,即便如此,仍然會比RelativeLayout的情況好一些。
總體原則:減少布局層次,加快渲染速度。
當線性布局和相對布局均可以實現時,優先使用線性布局LinearLayout,如果使用的是相對布局RelativeLayout,盡量避免RelativeLayout嵌套RelativeLayout,並且盡量使用padding代替margin。
二、<include />的使用
<include />標籤可以在一個布局中引用另外一個布局,實現布局重用。比如共同的標題列(title.xml),只要加上如下代碼即可重用。
<include layout=“@layout/title” />
三、<merge /> 的使用
<merge />標籤可以減少視圖的層級結構。比如說,如果主布局是線性布局,include進來的也是線性布局,這時候include進來的線性布局就是多餘的,可以用merge標籤代替(重用布局的父布局使用merge),仍使用include引入布局。
四、ViewStub的使用
ViewStub是一個輕量級的View,寬高均為0,實現View的消極式載入,避免資源的浪費,減少渲染時間,在需要的時候才進行載入。比如提醒框的使用。
五、Space控制項的使用
Space控制項佔據一定的空間,但是不顯示任何東西,可用於行間隔。
六、TextView的使用
TextView可同時顯示文字和圖片;TextView的屬性lineSpacingExtra可設定行間距。
七、LinearLayout線性布局
LinearLayout的屬性divider可設定分割線,相關屬性:dividerPadding、showDividers。
Android布局最佳化思考