一、容器属性
CoordinatorLayout
是一个扩展自ViewGroup
的布局容器,它可以用来协调、控制子View之间的交互。 比如在滚动界面时,一些特定的子View可以在屏幕内滚动 同时一些别的View可以保持静止。
在使用CoordinatorLayout
时,我们可以为它设置一些属性来控制子View的行为:
layout_scrollFlags
: 这个属性是让子View跟随滚动变化的主要属性。我们可以指定该子View在滚动时的动作比如折叠(SCROLL_FLAG_SCROLL
)、透明度变化(SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
)和悬浮(SCROLL_FLAG_SNAP
)等。layout_anchor
:这个属性指定View固定的地方(比如说一个ActionBar),让其他的View可以围绕它更好的布局layout_anchorGravity
:和前一个属性类似,不过这个属性指定的是layout_anchor
的位置。
<ImageView
app:layout_scrollFlags="scroll|enterAlways"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
二、协调多个子View的位置
使用CoordinatorLayout
我们还可以协调多个子View的位置,也就是实现一些动态变化的效果。
我们可以使用如下的属性:
layout_collapseMode
:它可以指定子View的折叠行为。layout_collapseParallaxMultiplier
:它可以设置透视折叠的倍数。
<ImageView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.9" />
三、自定义Behaviors
在CoordinatorLayout
中还可以自定义Behavior
,让不同的View有不同的交互效果。
创建自定义Behaviors的步骤:
- 创建一个自定义的类来扩展
CoordinatorLayout.Behavior
- 用
onDependentViewChanged
方法去定义View相互间的依赖行为 - 在XML中使用
app:layout_behavior
来指定这个Behavior
public class CustomBehavior extends CoordinatorLayout.Behavior<View> {
public CustomBehavior() {}
public CustomBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent,
View child, View dependency) {
return true;
}
}
四、Snackbar与CoordinatorLayout
在CoordinatorLayout
中使用Snackbar
的时候,可以使用到CoordinatorLayout.LayoutParams
提供的一些特殊滑动动作来产生一些更加优美的动画效果。
Snackbar snackbar = Snackbar.make(view, "Snackbar text!",
Snackbar.LENGTH_SHORT);
View snackbarView = snackbar.getView();
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) snackbarView.getLayoutParams();
params.setAnchorId(R.id.fab);
params.anchorGravity = Gravity.TOP;
params.gravity = Gravity.TOP;
snackbarView.setLayoutParams(params);
snackbar.show();
五、总结
通过使用CoordinatorLayout
,我们可以方便的协调不同View间的交互。这里我们从容器属性、多个子View的协调、自定义Behaviors以及Snackbar
等几个方面详细阐述了它的使用方法。希望这篇文章可以对大家理解和使用CoordinatorLayout
有所帮助。