Android
コーディネーターのレイアウトと動作
サーチ…
前書き
CoordinatorLayoutは超強力なFrameLayoutであり、このViewGroupの目標は内部にあるビューを調整することです。
CoordinatorLayoutの主な魅力は、XMLファイル内のビューのアニメーションとトランジションを調整する能力です。
CoordinatorLayoutは、2つの主要な使用例を対象としています。
:最上位のアプリケーションの装飾またはクロームのレイアウト
:1つ以上の子ビューとの特定の対話のためのコンテナとして
備考
CoordinatorLayout
は、 FrameLayout
を拡張するコンテナです。
取り付けることでCoordinatorLayout.Behavior
の直接の子にCoordinatorLayout
、あなたはタッチイベント、ウィンドウインセット、測定、レイアウト、およびネストされたスクロールを傍受できるようになります。
CoordinatorLayout
子ビューのBehaviors
を指定することにより、単一の親内に多くの異なるインタラクションを提供することができ、それらのビューは相互にやりとりすることもできます。ビュークラスは、 DefaultBehavior
アノテーションを使用してCoordinatorLayout
子として使用する場合、デフォルトの動作を指定できます。
シンプルな動作を作成する
Behavior
を作成するには、 CoordinatorLayout.Behavior
クラスを拡張するだけです。
CoordinatorLayout.Behaviorを拡張する
例:
public class MyBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
/**
* Default constructor.
*/
public MyBehavior() {
}
/**
* Default constructor for inflating a MyBehavior from layout.
*
* @param context The {@link Context}.
* @param attrs The {@link AttributeSet}.
*/
public MyBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
この動作は、呼び出されるCoordinatorLayout
子ビューにアタッチする必要があります。
プログラムで動作をアタッチする
MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);
XMLでビヘイビアをアタッチする
layout_behavior
属性を使用して、ビヘイビアをXMLに添付することができます。
<View
android:layout_height="...."
android:layout_width="...."
app:layout_behavior=".MyBehavior" />
動作を自動的にアタッチする
カスタムビューで作業している場合は、 @CoordinatorLayout.DefaultBehavior
アノテーションを使用してビヘイビアをアタッチできます。
@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {
}
SwipeDismissBehaviorの使用
SwipeDismissBehavior
は任意のビューで機能し、 CoordinatorLayout
してレイアウトでスワイプ機能を実装します。
ちょうど使用する:
final SwipeDismissBehavior<MyView> swipe = new SwipeDismissBehavior();
//Sets the swipe direction for this behavior.
swipe.setSwipeDirection(
SwipeDismissBehavior.SWIPE_DIRECTION_ANY);
//Set the listener to be used when a dismiss event occurs
swipe.setListener(
new SwipeDismissBehavior.OnDismissListener() {
@Override public void onDismiss(View view) {
//......
}
@Override
public void onDragStateChanged(int state) {
//......
}
});
//Attach the SwipeDismissBehavior to a view
LayoutParams coordinatorParams =
(LayoutParams) mView.getLayoutParams();
coordinatorParams.setBehavior(swipe);
ビュー間の依存関係を作成する
ビュー間の依存関係を作成するには、 CoordinatorLayout.Behavior
を使用します。別のView
View
を固定するには、次の操作を行いView
。
-
layout_anchor
属性を使用します。 - カスタム
Behavior
を作成し、true
返すlayoutDependsOn
メソッドを実装しtrue
。
たとえば、別のツールバーが移動されたときにImageView
を移動するためのBehavior
を作成するには(例ツールバー)、次の手順を実行します。
public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
true
返すlayoutDependsOn
メソッドをオーバーライドしtrue
。このメソッドは、レイアウトに変更が発生するたびに呼び出されます。@Override public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) { // Returns true to add a dependency. return dependency instanceof Toolbar; }
たび方法
layoutDependsOn
返すtrue
方法がonDependentViewChanged
と呼ばれています。@Override public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) { // Implement here animations, translations, or movements; always related to the provided dependency. float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); }