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); }