项目开发有新的需求,在晚上接触到了CoordinatorLayout协调布局,之前了解过没用过。最后项目效果是这样子的。借鉴了这篇博客
以下内容是记录使用过程中用的知识,和引用博客的类似。
<android.support.design.widget.CoordinatorLayout
...>
//建议将**Toolbar**放在**AppBarLayout**里面包裹住
//不然,如果使用**DrawerLayout**侧边栏出现时不会有遮盖阴影效果
<android.support.design.widget.AppBarLayout
...>
<android.support.v7.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
layout_scrollFlags 为需要进行处理的View设置动作。设置这个属性的View的上一个也必须设置次属性值。不能断开
- scroll:所有想滚动出屏幕的view都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。例如,TabLayout 没有设置这个值,将会停留在屏幕顶部
- enterAlways:设置这个flag时,向下的滚动都会导致该view变为可见,启用快速“返回模式”,否则就必须拉到顶端后才显示作用于最后一个设置 scroll 的View。注在使用时,如果Toolbar和TabLayout同时设置 scroll 属性(TabLayout在Toolbar下方),并且只有Toolbar设置 enterAlways 快速返回模式。向下滑动时,出现的不是Toolbar而是TabLayout,要滑动到顶端Toolbar才会显示。
- exitUntilCollapsed:滚动退出屏幕,最后折叠在顶端。
- snap:在滚动结束后,如果view只是部分可见,它将滑动到最近的边界。比如,view的底部只有25%可见,它将滚动离开屏幕,而如果底部有75%可见,它将滚动到完全显示。
- enterAlwaysCollapsed:当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
layout_behavior,在CoordinatorLayout 子视图中带有滚动属性的View要设置此属性,告诉协调布局它的滑动行为,一般自定义实现自己需要的功能。
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
...>
<android.support.v4.view.ViewPager
...
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
CollapsingToolbarLayout折叠模式
<android.support.design.widget.CoordinatorLayout
...>
<android.support.design.widget.AppBarLayout
...>
<android.support.design.widget.CollapsingToolbarLayout
...
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
...
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.8" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
layout_collapseMode 折叠模式
- parallax:视察效果,在滑动过程中,不管上滑还是下滑都会有视察效果
- pin:在滑动过程中,设置次属性的View会被固定,直到CollapsingToolbarLayout全部折叠或者全部展开
layout_collapseParallaxMultiplier 视差因子
- 取值在0~1之间:(在折叠之前)0滑多少动多少 1滑多少都不动
- 只有设置为parallax才有用
MD(Meterial Design)设计中需要注意的地方
CardView:app:cardElevation=”“6dp
- SDK 21 以下会自动留出阴影控件,Lollipop以上需要手动设置Margin(和cardElevation数值一样),这样会是SDK 21和Lollipop显示效果同。建立value-v21 dimen分别设置 0dp 和 cardElevation 一样的数值。
FloatingActionButton:Lollipop以上没有距离屏幕边框的Margin,也没有阴影效果。如果使用Snackbar,当Snackbar消失是不会回到原来位置。
- 定义values-v21 (一般情况是16dp)
- app:elevation(正常状态下的阴影)app:pressedTranslationZ(按下状态下的阴影)
- 设置marginbottom 和 marginright 为非零值时可复原(0.1dp)(v-21)