Android - 小紅書優化 - 封裝ViewGroup的優化建議

問題

我們知道過多的布局嵌套對View的繪制速度是有一定影響的,多一層嵌套意味著至少多走一次繪制流程,所以開發過程中一般都會特別注意layout層級的問題。針對xml往往可以使用ConstraintLayout替換以往的四大布局,但針對自定義ViewGroup卻很少有開發者關注其是否有多余的布局嵌套。

粗略看了小紅書二十幾個自定義ViewGroup,發現全部均有多余的布局嵌套問題,無一例外!所以建議小紅書在這個方面可以著重優化一下!

如下案例:

BeautySettingView類

如上圖,自定義ViewGroup? BeautySettingView繼承自LinearLayout,然后直接通過inflate將xml添加為自身的子布局,這樣會導致多了一層LinearLayout的嵌套,布局層次如下關系:

- BeautySettingView? ?(自定義ViewGroup)

? ? - LinearLayout? (從xml加載的布局)

? ? ? ? - com.xingin.alpha.emcee.beautify.NoBeautyView

? ? ? ? - View

? ? ? ? - android.recyclerview.widget.RecyclerView

理想的方案是優化成如下關系:

- BeautySettingView???(自定義ViewGroup)? ??

? ? - com.xingin.alpha.emcee.beautify.NoBeautyView

????- View? ? ? ??

????- android.recyclerview.widget.RecyclerView


優化方案

按照我經驗,最好的方案是:xml使用merge標簽

步驟如下:

1.xml布局的根節點使用merge;

2.merge節點通過指定屬性tools:parentTag="android.widget.LinearLayout"進行布局預覽

3.在自定義ViewGroup中重新設置相關布局屬性(ps:因為merge標簽上的屬性通過inflate是無效的,這一點非常需要注意)


根據以上步驟,重新修改BeautySettingView

(一)xml布局的根節點使用merge:

(二)merge節點通過指定屬性tools:parentTag="android.widget.LinearLayout"進行布局預覽:

(三)在自定義ViewGroup中重新設置相關布局屬性:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容