CoordinatorLayout是Android Support Library中的一個(gè)布局容器,主要用于處理子視圖的協(xié)調(diào)和交互。它提供了一些特殊的Behavior類,用于控制子視圖的顯示、隱藏、位置改變等行為。
CoordinatorLayout的特點(diǎn)有:
可以通過設(shè)置Behavior來控制子視圖的行為。
可以通過設(shè)置app:layout_anchor和app:layout_anchorGravity來設(shè)置子視圖的錨點(diǎn)和錨點(diǎn)對齊方式。
可以通過設(shè)置app:layout_behavior來設(shè)置子視圖的Behavior。
可以通過設(shè)置app:layout_dodgeInsetEdges來設(shè)置子視圖是否避開指定的邊界。
下面是一個(gè)CoordinatorLayout的實(shí)例代碼:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/image"
app:layout_anchor="@id/fab"
app:layout_anchorGravity="bottom|end"
app:layout_behavior="com.example.MyBehavior" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:src="@drawable/ic_add"
app:layout_behavior="com.example.MyBehavior" />
</android.support.design.widget.CoordinatorLayout>
在這個(gè)例子中,ImageView是一個(gè)子視圖,通過設(shè)置app:layout_anchor和app:layout_anchorGravity屬性,將它的錨點(diǎn)設(shè)置為FloatingActionButton,并且設(shè)置了一個(gè)自定義的Behavior類MyBehavior。FloatingActionButton也設(shè)置了相同的Behavior類。
下面是一個(gè)自定義的Behavior類的示例代碼:
public class MyBehavior extends CoordinatorLayout.Behavior<View> {
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
// 判斷dependency是不是一個(gè)指定的視圖
return dependency instanceof FloatingActionButton;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
// 當(dāng)dependency視圖位置改變時(shí),改變child視圖的位置
child.setX(dependency.getX());
child.setY(dependency.getY() - child.getHeight());
return true;
}
}
在這個(gè)示例中,自定義的Behavior類繼承自CoordinatorLayout.Behavior類,并重寫了layoutDependsOn()方法和onDependentViewChanged()方法。layoutDependsOn()方法用于判斷dependency視圖是不是一個(gè)指定的視圖,onDependentViewChanged()方法用于在dependency視圖位置改變時(shí)改變child視圖的位置。
通過使用CoordinatorLayout和Behavior類,我們可以實(shí)現(xiàn)一些復(fù)雜的交互效果,如AppBarLayout的滾動(dòng)效果、FloatingActionButton的自動(dòng)隱藏等。