LinearLayoutとRelativeLayoutの描画プロセスの比較

2211 ワード

普段UIを設計するとき、多くの人が使っているレイアウトがLinearLayoutとRelativeLayoutだと信じています.結局、この2つのレイアウトは私たちの一般的なニーズを実現することができます.Androidの勉強を始めたばかりの頃、Eclipseを使って開発され、毎回新しいレイアウトファイルが作成され、このレイアウトファイルのデフォルトで使用されているレイアウトはLinearLayoutだったことを覚えています.後にAndroid Studio開発に変更し、SDKバージョンが更新された後、新規のレイアウトファイルがRelativeLayoutをデフォルトレイアウトに変更されました.多くの人はこのGoogleチームが性能を考慮して最適化したと言っていますが、確かにRelativeLayoutはレイアウトのネストを減らしてレイアウトの性能を高めることができますが、Linearlayoutを使用すると注意しないとレイアウトのネスト階層が深すぎて、レイアウトの性能を大幅に低下させる可能性があります.でもLinearLayoutは本当にRelativeLayoutに及ばないの?答えは否定的だ.
View         onMeasure,onLayout, onDraw,LinearLayout RelativeLayout     ViewGroup, ViewGroup    View ,  LinearLayout RelativeLayout               。   ViewGroup       onDraw,  ViewGroup   ,         ,               ,                。          onMeasure onLayout      LinearLayout RelativeLayout。

   LinearLayout onMeasure  :

LinearLayoutには垂直方向と水平方向の2つの方向があることを知っています.Linearlayoutは、幅の高さを測定する際に、私たちが設定した方向に応じてそれぞれ異なる測定方法を呼び出していることがわかりますが、この2つの測定方法はほぼ同じで、measureVerticalでLinearlayoutの具体的な測定過程を説明しましょう.measureVerticalという方法は少し長いので、コードの一部を貼って問題を説明すればいいです.
 measureVertical           ,     ?      LinearLayout ,      layout_weight  ,  View   layout_weight           ,                 weight    View   ,                 View   ,       ,          weight    View     ,      View     ,     weight    View     measure  ,  :





     RelativeLayout onMeasure  ,      :









         RelativeLayout  View                 ,     ,  RelativeLayout     View        ,                 View    。

       LinearLayout RelativeLayout onLayout  。   ,  LinearLayout onLayout  ,  :



        ,    LinearLayout            ,    onMeasure          ,              ,    View                    。

   RelativeLayout onLayout  ,  :


 RelativeLayout onLayout   LinearLayout onLayout    ,        View,       View       ,     onLayout        。

  :LinearLayout RelativeLayout         onMeasure   ,RelativeLayout               View    , Linearlayout,       View   layout_weight   ,LinearLayout    View      ,      View             ,            layout_weight  。          ,         ,                          ,     LinearLayout,   ,            ,        RelativeLayout                。