CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar+Behavior

本文详细介绍了CoordinatorLayout及其子组件的使用方法与注意事项,包括AppBarLayout、CollapsingToolbarLayout等组件的特性设置,帮助开发者实现Android应用中的高级UI特效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:
coordinatorLayout使用详解及注意事项,看完这篇完全可以开发5.0的高级特效了

CoordinatorLayout

public class CoordinatorLayout extends ViewGroup implements NestedScrollingParent2 {

// public abstract class ViewGroup extends View implements ViewParent, ViewManager {

FloatingActionButton

public class FloatingActionButton extends VisibilityAwareImageButton 
		implements TintableBackgroundView, TintableImageSourceView, ExpandableTransformationWidget {...}

// public class VisibilityAwareImageButton extends ImageButton {...}

// public class ImageButton extends ImageView {...}

// public class ImageView extends View {...}

SwipeRefreshLayout

public class SwipeRefreshLayout extends ViewGroup implements NestedScrollingParent, NestedScrollingChild {

public abstract class ViewGroup extends View implements ViewParent, ViewManager {

RecyclerView

public class RecyclerView extends ViewGroup implements ScrollingView, NestedScrollingChild2 {

// public abstract class ViewGroup extends View implements ViewParent, ViewManager {

Snackbar

public final class Snackbar extends BaseTransientBottomBar<Snackbar> {...}

// public abstract class BaseTransientBottomBar<B extends BaseTransientBottomBar<B>> {...}


AppBarLayout

public class AppBarLayout extends LinearLayout {

// public class LinearLayout extends ViewGroup {

// public abstract class ViewGroup extends View implements ViewParent, ViewManager {

AppBarLayout继承自LinearLayout,布局方向为垂直方向。

AppBarLayout响应了CoordinatorLayout的layout_behavior属性

AppBarLayout的【直接子控件】可以设置的属性:layout_scrollFlags (是否可响应滑动):

1.scroll|exitUntilCollapsed
如果AppBarLayout的直接子控件设置该属性,该子控件可以滚动,
向上滚动NestedScrollView出父布局(一般为CoordinatorLayout)时,会折叠到顶端,
向下滚动时NestedScrollView必须滚动到最上面的时候才能拉出该布局

2.scroll|enterAlways:
只要向下滚动该布局就会显示出来,只要向上滑动该布局就会向上收缩

3.scroll|enterAlwaysCollapsed:
向下滚动NestedScrollView到最底端时该布局才会显示出来

4.如果不设置改属性,则改布局不能滑动,滑动的时候最终位置停靠在顶部

方法一:在代码中使用这个方法

setScrollFlags(int) 

方法 二:在布局文件中使用自定义属性

app:layout_scrollFlags="scroll|enterAlways"

CollapsingToolbarLayout

public class CollapsingToolbarLayout extends FrameLayout {

字面意思是 【折叠的toolbar】 ,它确实是起到折叠作用的,
可以把自己的自布局折叠 继承自framLayout,所以它的直接子类可以设置layout_gravity来控制显示的位置,

它的【直接子布局】可以使用的属性:layout_collapseMode (折叠模式):

1.pin:
在滑动过程中,此自布局会固定在它所在的位置不动,
直到CollapsingToolbarLayout全部折叠或者全部展开

2.parallax:
视察效果,在滑动过程中,不管上滑还是下滑都会有视察效果,
不知道什么事视察效果自己看gif图(layout_collapseParallaxMultiplier视差因子 0~1之间取值,
当设置了parallax时可以配合这个属性使用,调节自己想要的视差效果)

其实就是让这个View的滚动的速度比其他正常滚动的View速度稍微慢一点

3.不设置:
跟随NestedScrollView的滑动一起滑动,NestedScrollView滑动多少距离他就会跟着走多少距离

方法一:在代码中使用这个方法

setCollapseMode(int collapseMode)

方法 二:在布局文件中使用自定义属性

app:layout_collapseMode="pin"

Toolbar

public class Toolbar extends ViewGroup {

Toobar主要是用来替换ActionBar的,换句话说,ActionBar能做的,Toolbar都能做。

NestedScrollView

public class NestedScrollView extends FrameLayout implements NestedScrollingParent,
        NestedScrollingChild, ScrollingView {

NestedScrollView+Recyclerview 可解决 ListView+ScrollView 的嵌套滑动冲突

Behavior

AppBarLayout与可滚动的view(如:ScrollView)关联起来需要的 layout_behavior :

app:layout_behavior="@string/appbar_scrolling_view_behavior"

// android.support.design.widget.AppBarLayout$ScrollingViewBehavior

总结:

1、 AppbarLayout 要作为 CoordinatorLayout 的直接子View使用,CollapsingToolbarLayout 要作为AppbarLayout 的直接子View 使用,否则,上面将的特性是没有效果的。

2、AppbarLayout 的直接子view设置 layout_scrollFlags(滚动响应)

3、CollapsingToolbarLayout 的直接子view设置 layout_collapseMode (折叠模式)

4、CoordinatorLayout 的 AppbarLayout 之外的view设置 app:layout_behavior (行为)

<?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:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

      <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:title="我是CollapsingToolbarLayout">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?android:attr/actionBarSize"
                app:layout_collapseMode="pin">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="我是toolbar(pin)"
                    android:textColor="#ffffff" />

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
	
	<-- 可滚动的view -->

	<-- 其他view -->
	
</android.support.design.widget.CoordinatorLayout>
	
<?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:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

	<android.support.design.widget.AppBarLayout
		android:id="@+id/appbar"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

		<android.support.v7.widget.Toolbar
			android:id="@+id/toolbar"
			android:layout_width="match_parent"
			android:layout_height="?attr/actionBarSize"
			android:background="?attr/colorPrimary"
			app:layout_scrollFlags="scroll|enterAlways"
			app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

	</android.support.design.widget.AppBarLayout>

	<-- 可滚动的view -->

	<-- 其他view -->
	
</android.support.design.widget.CoordinatorLayout>
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值