非常にシンプルなものを表示したいだけでも柔軟性があるため、Viewコンテナが必要になるたびに常にRelativeLayoutを使用してきました。
パフォーマンス/グッドプラクティスの観点から、そうしてもいいですか、それともできる限りLinearLayoutを使用してみるべきですか?
ありがとう!
非常にシンプルなものを表示したいだけでも柔軟性があるため、Viewコンテナが必要になるたびに常にRelativeLayoutを使用してきました。
パフォーマンス/グッドプラクティスの観点から、そうしてもいいですか、それともできる限りLinearLayoutを使用してみるべきですか?
ありがとう!
回答:
Romain Guyは、Google I / O 2013(Writing Custom Views for Android)での講演で、誰もがRelativeLayoutsをあらゆるものに使い始める原因となった誤解を明らかにしました。RelativeLayoutは常に2つの測定パスを実行する必要があります。全体的には、ビューの階層が単純である限り無視できます。ただし、階層が複雑な場合、追加のメジャーパスを実行すると、かなりのコストがかかる可能性があります。また、RelativeLayoutsをネストすると、指数測定アルゴリズムが得られます。
多数のビューをレイアウトしている場合(リストビューなど)を除き、LinearLayoutまたはRelativeLayoutのどちらを選択してもパフォーマンスはごくわずかです。仕事に使うのに最も便利な方を選び、必要なときにだけパフォーマンスを気にしてください。
そして、これは効率的なレイアウトの作成に関する公式ドキュメントがRelativeLayoutとLinearLayoutのパフォーマンスについて述べていることです:
基本的な機能にこだわるのは残念ながら、ユーザーインターフェイスを作成する最も効率的な方法ではありません。一般的な例は、LinearLayoutの乱用です。これにより、ビュー階層のビューが急増します。アプリケーションに追加するすべてのビュー、またはさらに悪いことに、すべてのレイアウトマネージャーは、初期化、レイアウト、描画が遅くなるという犠牲を伴います。子を2回測定する必要がある、重みパラメータを使用するいくつかのLinearLayoutをネストする場合、レイアウトパスは特に高価になる可能性があります。
RelativelayoutはLinearlayoutよりも効果的です。
ここから:
基本的なレイアウト構造を使用することが最も効率的なレイアウトにつながるというのは、よくある誤解です。ただし、アプリケーションに追加する各ウィジェットとレイアウトには、初期化、レイアウト、および描画が必要です。たとえば、LinearLayoutのネストされたインスタンスを使用すると、ビューの階層が過度に深くなる可能性があります。さらに、layout_weightパラメーターを使用するLinearLayoutのいくつかのインスタンスをネストすると、各子を2回測定する必要があるため、特にコストがかかる可能性があります。これは、ListViewやGridViewで使用する場合など、レイアウトが繰り返し拡張される場合に特に重要です。
2018年更新: AndroidのNリリースでは、ConstraintLayout
クラスはと同様の機能を提供しますRelativeLayout
が、大幅にコストが低くなります。これは非常に強力なレイアウトマネージャであり、複雑なGUIを構築する必要があるときはいつでも使用する必要があります。
あなたが試すことができます
<LinearLayout>
<ViewPager/><!--Loading images from net, it is very good as a testing case.-->
<ViewPagerIndicator/>
<TextView/> <!--Show some info about page-->
</LinearLayout>
<RelativeLayout>
<ViewPager/><!--Loading images from net, it is very good as a testing case.-->
<ViewPagerIndicator below="id of ViewPager"/>
<TextView below="id of ViewPagerIndicator"/> <!--Show some info about page-->
</RelativeLayout>
あなたのページがインターネットからいくつかの画像をロードする場合、あなたは多くの異なることがわかるでしょう。この場合、LinearLayoutはRelativeLayoutよりも100%優れています。