実装するもの:Androidで適切なマテリアルデザインを作成するにはConstraintLayout
またはCoordinatorLayout
ですか?
CoordinatorLayoutは、 Behaviors を管理するアクティビティのトップレベルレイアウトとなることを目的としています。相互作用とアニメーション。
ConstraintLayoutの主な目標は、複数の子を持つフラットレイアウトを作成する便利な方法を提供することです(より強力なRelativeLayout)。
したがって、CoordinatorLayoutは、アクティビティのコンポーネントの複雑な動作(特にアニメーション)を管理し、コンポーネントの適切な配置(特にリストアイテム)のConstraintLayoutを管理します。
CoordinatorLayoutは超強力なFrameLayoutです。
CoordinatorLayoutは、主に2つのユースケースを対象としています。
デフォルトでは、FrameLayoutに複数の子を追加すると、それらは互いに重なります。単一の子ビューを保持するには、FrameLayoutを最も頻繁に使用する必要があります。 CoordinatorLayoutの主な魅力は、その中のビューのアニメーションと遷移を調整できることです。 CoordinatorLayoutの子ビューに Behaviors を指定することにより、単一の親内でさまざまな相互作用を提供でき、それらのビューは互いに相互作用することもできます。ビュークラスは、CoordinatorLayout.DefaultBehaviorアノテーションを使用してCoordinatorLayoutの子として使用される場合のデフォルトの動作を指定できます。
ビヘイビアを使用して、スライド式の引き出しやパネルから、スワイプで消すことができる要素や、移動およびアニメーションするときに他の要素にくっつくボタンに至るまで、さまざまなインタラクションと追加のレイアウト変更を実装できます。
ConstraintLayoutを使用すると、フラットビュー階層(ネストされたビューグループなし)で大規模で複雑なレイアウトを作成できます。 RelativeLayoutと似ていますが、すべてのビューは兄弟ビューと親レイアウトの間の関係に従ってレイアウトされますが、RelativeLayoutよりも柔軟性があり、使いやすいです。 Android Studioのレイアウトエディターを使用します。
現在、使用できるさまざまなタイプの制約があります。
Androidの適切なマテリアルデザインのためにConstraintLayoutまたはCoordinatorLayoutを実装するもの
効率的なUIおよびマテリアルアニメーションを構築するには、ConstraintLayoutとCoordinatorLayoutの両方を使用する必要がある場合があります。
参考のために、CoordinatorLayoutとConstraintLayoutの両方を使用する一般的な例を以下に示します。
Coordinatorlayoutをトップレベルのアプリケーション装飾として使用します。通常、AppBarLayout、FloatingActionButton、および画面の本体(NestedScrollViewなど)のレイアウトに使用されます。 NestedScrollView内では、ConstraintLayoutを使用して、レイアウトの残りの部分をフラットな階層として記述します。
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Your scrolling content -->
<androidx.constraintlayout.widget.ConstraintLayout
...>
<!-- body of constraint layout -->
<Button Android:id="@+id/button" ...
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<com.google.Android.material.appbar.AppBarLayout
Android:layout_height="wrap_content"
Android:layout_width="match_parent">
<androidx.appcompat.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
<com.google.Android.material.tabs.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"/>
</com.google.Android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ボーナスポイント
アニメーションを構築するためのConstraintLayoutのサブクラスである強力な MotionLayout を使用できます。 詳細な例についてはこれを確認できます MotionLayoutを使用したカスタムアニメーションの場合。
(ほとんど)常にCoordinatorLayout
を使用しているように見えますが、内部でConstraintLayout
を使用している場合もあります。次のリソースを参照してください
https://codelabs.developers.google.com/codelabs/material-design-style/index.html# のコードラボでは、CoordinatorLayout
のみを使用しています
サンプルAndroid-sunflowerアプリ(「Android開発のベストプラクティスを示す」)は、トップレベルアクティビティには使用せず、 fragment_plant_detail.xml
内で両方を使用し、ConstraintLayout
CoordinatorLayout
内にある:
<layout ...>
<data .../>
<Android.support.design.widget.CoordinatorLayout ...>
<Android.support.design.widget.AppBarLayout ...>
<Android.support.design.widget.CollapsingToolbarLayout ...>
<ImageView... />
<Android.support.v7.widget.Toolbar... />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.widget.NestedScrollView ...>
<Android.support.constraint.ConstraintLayout ...>
<TextView.../>
<TextView... />
</Android.support.constraint.ConstraintLayout>
</Android.support.v4.widget.NestedScrollView>
<Android.support.design.widget.FloatingActionButton ... />
</Android.support.design.widget.CoordinatorLayout>
</layout>