Android Design库控件使用

CoordinatorLayout

CoordinatorLayout的子控件可以声明app:layout_behavior=""指定行为

AppBarLayout

AppBarLayout是一种LinearLayout,AppBarLayout的直接子控件可以声明app:layout_scrollFlags属性,来指定与可滑动控件之间的交互行为。layout_scrollFlags接受以下几种标志:

  1. scroll:设置View可以滑动。
    如果没有设置scroll标志就无法滑动,也就没有进入退出等其他行为了。scroll标志是其他标志生效的前提。
    注意如果有同层次其他View声明在这个View前面,而且没有设置scroll标志,那这个View设置的scroll标志也无法生效。
  2. enterAlways:任何下滑都会使View变为可见,下滑事件会先使这个View进入可见,然后才继续滑动可滑动控件。
  3. enterAlwaysCollapsed:配合enterAlways标志使用,当这个View指定了minHeight,而且使用了enterAlways|enterAlwaysCollapsed标志,则这个View只会进入到最小高度的折叠模式,当可滑动控件滑动到了顶部,这个View才会完全展开。
  4. exitUntilCollapsed:退出时会滑动到折叠状态就不再退出。没有设置这个标志的话就会完全退出。折叠状态的高度由minHeight指定,如果这个View指定了minHeight和这个标志,退出时会退出到minHeight然后固定在那里。
  5. snap:滑动结束时,如果这个View是部分可见,则会自动滑动到最近的边,即自动完全退出或者完全进入,不会卡在中间的半进入半退出状态。

注意:使用scroll标志的View必须声明在没有scroll标志的View之前,这样才能保证View从顶部退出,固定的View跟随其后固定在顶部。

总结:

  1. 如果只指定了scroll标志,则默认进入退出模式是
    进入:进入时机是可滑动控件上滑到顶部后,这个View才滑动进入。没有折叠这个概念。
    退出:退出时机是可滑动控件准备上滑的时候这个View就开始退出。View退出后才滑动可滑动控件。

  2. 指定EnterAlways和EnterAlwaysCollapsed可以修改进入时机以及进入是否折叠:
    EnterAlways:只要下滑就完全进入。
    enterAlways|enterAlwaysCollapsed:下滑先部分进入,可滑动控件滑动到顶部后才完全进入。

  3. 指定ExitUntilCollapsed无法修改退出时机,只要上滑都会退出,只能修改退出是否折叠:
    ExitUntilCollapsed:上滑退出至最小高度。

CollapsingToolbarLayout

直接把Toolbar添加到AppBarLayout之中,可以指定是否滑动以及滑动的进入退出折叠行为,但是无法指定其中的元素在折叠过程中的变化行为,此时可以使用CollapsingToolbarLayout。

CollapsingToolbarLayout是一种FrameLayout,其子控件可以指定app:layout_collapseMode属性,接受pin和parallax两种标志。
pin标志可以使所在View在折叠过程中固定在上方。

parallax标志可以实现视差效果,此时可以另外设置一个属性指定视差系数app:layout_collapseParallaxMultiplier

可以设置app:contentScrim指定CollapsingToolbarLayout折叠时的颜色

CollapsingToolbarLayout和Toolbar混合使用的话,标题可以自动放大缩小,这时候title应该要设置在CollapsingToolbarLayout才能生效,而且Toolbar必须要设置高度,如果设为wrap_content会无法显示标题。

在AppBarLayout中指定主题可以设置CollapsingToolbarLayout中的标题,比如说默认标题颜色为黑色,通过在AppBarLayout中设置android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar",标题颜色就变成白色了。

如果在AppBarLayout中某个上面的控件要实现视差效果,则可以在这个控件外面包裹一层CollapsingToolbarLayout,设置collapse_mode=”parallax”即可。

SwipeDismissBehavior

这是design包内提供的一个滑动删除行为类,使用在CoordinatorLayout的直接子控件可以实现滑动删除。

这里写图片描述

// 创建SwipeDismissBehavior,可以接受目标View为泛型
final SwipeDismissBehavior<RecyclerView> swipeDismissBehavior = new SwipeDismissBehavior();
// 设置滑动方向
swipeDismissBehavior.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_ANY);
// 可以设置监听
swipeDismissBehavior.setListener(new SwipeDismissBehavior.OnDismissListener() {
            @Override
            public void onDismiss(View view) {
                Toast.makeText(MainActivity.this, "swipe", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onDragStateChanged(int state) {

            }
        });
// 获取CoordinatorLayout的布局参数
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) recyclerView.getLayoutParams();
// 设置滑动删除行为
layoutParams.setBehavior(swipeDismissBehavior);

FloatingActionButton

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/ic_launcher"
    app:layout_anchor="@id/app_bar"
    app:layout_anchorGravity="bottom|right|end"/>

通过指定layout_anchor属性可以设置锚点控件,指定layout_anchorGravity属性可以设置FloatingActionButton中心对齐于锚点控件的位置。

AppBarLayout折叠起来,FloatingActionButton自动消失是FAB的默认行为,如果指定了其他行为就不会自动消失了。

这里写图片描述

NestScrollView

提供behavior_overlapTop属性,可以设置与上面控件的重叠部分大小,比如与CollapsingToolbarLayout重叠,CollapsingToolbarLayout的title可以自动调整不被覆盖住。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值