本当に単純なものを表示したいだけでも、柔軟性があるため、Viewコンテナが必要になるたびにRelativeLayoutを常に使用しています。
パフォーマンス/グッドプラクティスの観点から、そうしても大丈夫ですか、それとも可能な場合はLinearLayoutを使用してみるべきですか?
ありがとう!
本当に単純なものを表示したいだけでも、柔軟性があるため、Viewコンテナが必要になるたびにRelativeLayoutを常に使用しています。
パフォーマンス/グッドプラクティスの観点から、そうしても大丈夫ですか、それとも可能な場合はLinearLayoutを使用してみるべきですか?
ありがとう!
Google I / O 2013(Android用のカスタムビューの作成)での講演で、Romain Guyは、すべての人がすべてにRelativeLayoutsを使い始める原因となった誤解を明らかにしました。RelativeLayoutは、常に2つのメジャーパスを実行する必要があります。ビュー階層が単純である限り、全体的には無視できます。ただし、階層が複雑な場合、追加のメジャーパスを実行するとかなりコストがかかる可能性があります。また、RelativeLayoutsをネストすると、指数測定アルゴリズムが得られます。
多くのビューを(たとえばListViewで)レイアウトしない限り、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%優れています。