【Support Design】CoordinatorLayout 初探索
2015-12-02 21:53
218 查看
属于
先看Google官方的Sample源码
我们可以看到,在根局部使用了
关于
仅NestedScrollView可以造成滑动时AppBarLayout高度改变,ScrollView不可以
关于
举例:
在API21 的Style文件中的设置
若不存在
在
在滑动前,
滑动后,
关于
仅当第一个参数设置为
内容上滑时,
内容上滑时,
内容上滑时,
内容上滑时,
android.support.design.widget包中的一个新组件,使
AppBarLayout可以随着用户的滑动而改变高度,并且可以在初始位置将
AppBarLayout背景设置为一张
Image,在滑动到一定时间点时切换到
Toolbar的样式
先看Google官方的Sample源码
[code]<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:fitsSystemWindows="true" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/text_margin" android:text="@string/large_text" /> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" app:layout_anchor="@id/app_bar" app:layout_anchorGravity="bottom|end" /> </android.support.design.widget.CoordinatorLayout>
我们可以看到,在根局部使用了
CoordinatorLayout,打开源码
[code]public class CoordinatorLayout extends ViewGroup implements NestedScrollingParent
CoordinatorLayout继承自
ViewGroup。所有定义的子部件位置默认生成在左上角。布局上只能通过
margin和
padding等基本属性设置子部件位置
关于app:layout_behavior
NestedScrollView需设置
app:layout_behavior为
android.support.design.widget.AppBarLayout$ScrollingViewBehavior,可以引用
@string/appbar_scrolling_view_behavior,使
NestedScrollView自适应
AppBarLayout的高度变化
仅NestedScrollView可以造成滑动时AppBarLayout高度改变,ScrollView不可以
关于fitSystemWindows
举例:[code]AppBarLayout.getHeight() == 180p Toolbar.getHeight() == ?attr/actionBarSize
在API21 的Style文件中的设置
[code]<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item>
CoordinatorLayout中的
fitsSystemWindows不设置或设置为
false,会让
StatusBar变为默认状态,即
transparent
AppBarLayout和
CollaspingToolbarLayout中的
fitsSystemWindows不设置或设置为
false,会让
StatusBar在滑动前显示为
ColorPrimaryDark,滑动后显示
ColorPrimary
若不存在
CollaspingToolbarLayout时给
AppBarLayout设置
fitsSystemWindows = true会导致
StatusBar失去高度
Toolbar中无影响
在
CoordinatorLayout、
AppBarLayout和
CollaspingToolbarLayout中都设置
fitsSystemWindows = true后:
在滑动前,
height = AppBarLayout.getHeight()时,
StatusBar的颜色和
CollaspingToolbarLayout背景色相同(即图片会延伸到
StatusBar,但状态栏图标不覆盖)
滑动后,
height = Toolbar.getHeight()时,
StatusBar颜色恢复到
ColorPrimaryDark
关于app:layout_scrollFlags
仅当第一个参数设置为Scroll时会造成滑动时高度的改变,滑动时
CollaspingToolbarLayout在过程某时背景变更为
app:contentScrim
Scroll|exitUntilCollapsed
内容上滑时,
AppBarLayout的高度改变,改变到与
Toolbar的高度相同为止,过程线性变化
Scroll|enterAlways
内容上滑时,
AppBarLayout的高度改变,改变到0为止,过程线性变化,更平滑
Scroll|enterAlwaysCollasped
内容上滑时,
AppBarLayout的高度改变,改变到0为止,过程线性变化
Scroll|snap
内容上滑时,
AppBarLayout的高度改变,上滑停止时,判断距离顶端和低端的高度,变化为极大或极小
相关文章推荐
- 黑马程序员——笔记之--迭代器原理探究
- Thread中的异常处理
- 应届游戏开发求职路
- 1029. Median (25)【排序】——PAT (Advanced Level) Practise
- FDFullscreenPopGesture全局右滑
- 菜鸟学Linux命令:lsof命令 查找指定用户、进程、端口打开的文件
- 性能测试项目总结-虚拟数据的准备
- 【C++】基础知识—对C语言的加强
- select、poll、epoll简介
- android 获取wifi状态讲义
- linux下安装lnmp环境
- struts2简单数据验证
- java-Thread创建
- 当activity运行时添加fragment(fragment应用的第二种方法)
- 检测网络状态
- qsort和sort学习与比较
- linux中export和source的作用和区别
- 剑指offer:字符串的排列
- Boost练习程序(multi_index_container)
- SystemVerilog学习笔记 - 动态数组