サーチ…


前書き

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

たとえば、別のツールバーが移動されたときに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);
    }
    


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow