線性佈局和相對佈局的實現原理

前言

對於中高級的工程師來說,有一定的閱讀源碼的經驗已經必備技能之一了,尤其是 LinearLayout 和 RelativeLayout,我們先準備一下要掌握的知識點:

  • LinearLayout 的 Weight 是如何實現的?
  • LinearLayout 的 Weight 對於測量過程增加了哪些實現成本?
  • LinearLayout 的 Weight 真的會導致需要測量兩次嗎?
  • RelativeLayout 的 Measure 過程爲什麼會有兩次?
  • RelativeLayout 的 Padding 和 Margin 對於居中屬性爲什麼沒有影響?
  • RelativeLayout 在版本 4.2,4.3 和 4.4 做了哪些調整和適配?

還有很多其他的問題困擾着我們,很多技術分享文章都只是講大概的流程,被問到細節的時候,我們還是會一臉懵逼,不知所措。

這一篇 Chat 我們來詳細的分析一下 LinearLayout 和 RelativeLayout 的實現原理,是一句一句的分析,真的十分詳細的分析。

LinearLayout

LinearLayout 的特性是線性佈局,weight 屬性是他的專屬利器,可以實現比例佈局。LinearLayout 可以設置橫向或者是豎向,這裏以豎向佈局作爲分析的目標。

onMeasure

首先我們看一下 LinearLayout 的 onMeasure 方法:

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mOrientation == VERTICAL) {
            measureVertical(widthMeasureSpec
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章