LinearLayoutとRelativeLayoutの描画プロセスの比較
2211 ワード
普段UIを設計するとき、多くの人が使っているレイアウトがLinearLayoutとRelativeLayoutだと信じています.結局、この2つのレイアウトは私たちの一般的なニーズを実現することができます.Androidの勉強を始めたばかりの頃、Eclipseを使って開発され、毎回新しいレイアウトファイルが作成され、このレイアウトファイルのデフォルトで使用されているレイアウトはLinearLayoutだったことを覚えています.後にAndroid Studio開発に変更し、SDKバージョンが更新された後、新規のレイアウトファイルがRelativeLayoutをデフォルトレイアウトに変更されました.多くの人はこのGoogleチームが性能を考慮して最適化したと言っていますが、確かにRelativeLayoutはレイアウトのネストを減らしてレイアウトの性能を高めることができますが、Linearlayoutを使用すると注意しないとレイアウトのネスト階層が深すぎて、レイアウトの性能を大幅に低下させる可能性があります.でもLinearLayoutは本当にRelativeLayoutに及ばないの?答えは否定的だ.
LinearLayoutには垂直方向と水平方向の2つの方向があることを知っています.Linearlayoutは、幅の高さを測定する際に、私たちが設定した方向に応じてそれぞれ異なる測定方法を呼び出していることがわかりますが、この2つの測定方法はほぼ同じで、measureVerticalでLinearlayoutの具体的な測定過程を説明しましょう.measureVerticalという方法は少し長いので、コードの一部を貼って問題を説明すればいいです.
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 。