CoordinatorLayout + AppBarLayout + ToolBar
来源:互联网 发布:js中json数组 编辑:程序博客网 时间:2024/05/29 04:36
主要参考了 http://blog.csdn.net/leejizhou/article/details/50533020, 然后做了 一个自己的例子
首先是引入sdk 在builde.gradle文件中添加
compile
'com.android.support:appcompat-v7:23.1.1'
compile
'com.android.support:design:23.1.1'
其实 这一部份主要是布局上操作, 代码没有什么内容
需求一页面有scroll内容时, toolbar 在上滑时隐藏,下滑时显示,详情见注释部分
记得把actionbar隐藏,设置主题就行想要状态栏背景和图片背景无缝链接 就需要在style文件中将 colorPrimaryDark (状态栏)透明
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayoutandroid:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark"> <!-- 用不用这个Theme影响不大-->
<!--为了能够让Toolbar响应滚动事件需要在Toolbar外面放AppBarLayout的布局容器-->
<!-- AppBarLayout里面定义的view只要设置了app:layout_scrollFlags属性,
就可以在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView滚动事件发生的时候会被触发-->
<!-- Toolbar中的app:layout_scrollFlags属性里面必须至少启用scroll,
这样Toolbar才会滚动出屏幕,否则它将一直固定在顶部。-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways">
<TextView
android:textSize="22sp"
android:text="title"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<!-- 定义AppBarLayout与滚动视图之间的联系-->
<!-- 在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。
Android design support library包含了一个字符串资源@string/appbar_scrolling_view_behavior,
这个是官方定义好的,我们直接拿来用就OK了,它和AppBarLayout.ScrollingViewBehavior相匹配,
当这个滚动的View发生滚动事件时候,CoordinatorLayout会搜索自己所包含的其他view,
看看是否有view与这个behavior相关联,所以NestedScrollView滚动的时候会触发AppBarLayout-->
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="textString"
android:textSize="20sp"/>
<Button
android:id="@+id/btn"
android:text="click me"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
总结下:
1. 根布局控件必须是CoordinatorLayout,最好设置属性android:fitsSystemWindows="true"
2. toolbar外层要放置一个AppBarLayout,
3. toolbar要设置一个属性app:layout_scrollFlags="scroll|enterAlways",
这个属性是最为AppBarLayout的子控件存在的属性,设置为scroll才能不固定.
4. 在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加 app:layout_behavior="@string/appbar_scrolling_view_behavior"属性,这样才能和AppBarLayout联动
需求二 视差滚动和toolbar切换显示
直接看布局文件以及注释:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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="300dp"
android:fitsSystemWindows="true"
app:theme="@style/ThemeOverlay.AppCompat.Dark">
<!--
CollapsingToolbarLayout的2个重要属性:
必须要有: layout_scrollFlags=”scroll|exitUntilCollapsed”:向上滚动时收缩View,
但可以固定Toolbar,使Toolbar一直在上面,
enterAlways:使Toolbar不保留在上面 但是手指一向下滑动就出现
enterAlwaysCollapsed 不保留exitUntilCollapsed 保留
app:expandedTitleMargin="33dp" 布局张开时候title与周边的距离
app:statusBarScrim="@color/colorAccent" statusBar颜色 不一定生效 建议在style文件中设置
app:contentScrim: 当CollapsingToolbarLayout折叠后背景颜色-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:fitsSystemWindows="true"
app:expandedTitleMargin="33dp"
app:statusBarScrim="@color/colorAccent"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!-- CollapsingToolbarLayout子view,ImageView属性
layout_collapseMode=”parallax”:使ImageView跟随滚动的时候具有视差效果 图片向下走 设置为pin 图片向上走
layout_collapseParallaxMultiplier=”0.1”:视差因子,设置视差滚动因子,值为:0~1-->
<ImageView
android:fitsSystemWindows="true"//这个属性加上主题设置状态栏透明就能实现状态栏图片统一
android:layout_width="match_parent"android:layout_height="match_parent"
android:scaleType="fitStart"
android:src="@mipmap/ic_launcher"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5"/>
<!--为了使Toolbar具有折叠的效果,Toolbar外面还要放一个CollapsingToolbarLayout布局容器,
CollapsingToolbarLayout里面放了一个ImageView和一个Toolbar,
并把这个CollapsingToolbarLayout放到AppBarLayout中作为一个整体。-->
<!-- CollapsingToolbarLayout子view,Toolbar属性
layout_collapseMode=”pin”:当CollapsingToolbarLayout完全收缩后,
Toolbar还可以保留在屏幕上。
这个属性不设置 在CollapsingToolbarLayout 中设置app:layout_scrollFlags="scroll|exitUntilCollapsed"就会保留
-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_gravity="bottom"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<!-- app:layout_behavior="@string/appbar_scrolling_view_behavior"
这个属性至关重要 只有设置了它 才能实现与AppBarLayout的关联-->
<android.support.v4.widget.NestedScrollView
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:textSize="20sp"
android:text="textString"
android:layout_margin="9dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.v4.widget.NestedScrollView>
<!-- 锚点在AppBarLayout上,视差图片隐藏时也隐藏 -->
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16sp"
android:src="@android:drawable/btn_star"
app:layout_anchor="@id/app_bar"
app:layout_anchorGravity="bottom|end"/>
</android.support.design.widget.CoordinatorLayout>
总结;
1. 根布局控件必须是CoordinatorLayout,最好设置属性android:fitsSystemWindows="true"
2.AppBarLayout包含CollapsingToolbarLayout布局,CollapsingToolbarLayout需要指定属性
app:layout_scrollFlags="scroll|exitUntilCollapsed" // 向上滚动时收缩View
app:contentScrim="?attr/colorPrimary" //这个指定折叠后的背景色
3. CollapsingToolbarLayout 下包含视差图片的ImageView以及ToolBar 2个子控件
4 .最为CollapsingToolbarLayout的视察图片的控件ImageView需要2个属性:
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.1"
5.最为和视察图片交互,ToolBar需要指定属性
app:layout_collapseMode="pin"
6. 主要的带scroll属性的控件,比如NestedScrollView或者ScrollView, 需要指定属性:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
7.如果 FloatingActionButton指定属性
app:layout_anchor="@id/app_bar" //锚点定在AppBarLayout上,则可以随视差滚动联动
- CoordinatorLayout + AppBarLayout + ToolBar
- CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar
- android 控件 隐藏toolbar-(CoordinatorLayout Toolbar AppbarLayout)
- CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar用法小结
- recyclerview,AppBarLayout,Toolbar,CoordinatorLayout 的结合使用~
- CoordinatorLayout + AppBarLayout实现滑动隐藏ToolBar
- CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、Toolbar混合使用经验
- CoordinatorLayout/AppBarLayout/Toolbar/TabLayout遮挡下方布局
- Design 四: CoordinatorLayout + AppBarLayout+ Toolbar+NestedScrollView
- Design 四: CoordinatorLayout + AppBarLayout+ Toolbar+NestedScrollView
- Material Design之CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar
- Material Design 之 CoordinatorLayout + AppBarLayout 实现上滑隐藏ToolBar
- Android Material Design(5) CoordinatorLayout,AppBarLayout,Toolbar,CollapsingToolbarLayout的使用
- JuheNews系列之二 · ToolBar+AppBarLayout+CoordinatorLayout+CollapsingToolbarLayout
- CoordinatorLayout配合AppBarLayout,Toolbar和TabLayout的使用
- Android学习系列Toolbar,AppBarLayout,CoordinatorLayout,CollapsingToolbarLayout使用小结
- Android CoordinatorLayout + AppBarLayout+ToolBar(向上滚动隐藏指定的View)
- CoordinatorLayout配合AppBarLayout,Toolbar和TabLayout的使用
- 多源代码文件程序的编译
- 网页关闭前js提示
- poj 3268 Silver Cow Party(迪杰斯特拉)
- 2017年看的tracking论文
- 三道练习题,崭新的新手,没学过java,见谅!
- CoordinatorLayout + AppBarLayout + ToolBar
- 数据结构简要认识及链表的熟悉与掌握
- border、padding、标签的转换
- MyBatis知识详解
- 极简设计如何实现(二)
- vim实现tab显示为4个空格而非替换
- Ubuntu16.04下安装redis并实现helloworld
- javascript时间戳和日期字符串相互转换
- glDrawArrays 和 glDrawElements 区别?