状态栏3---ToolBar可折叠效果,添加监听

来源:互联网 发布:linux 777 什么权限 编辑:程序博客网 时间:2024/06/05 15:14

对比于上一篇文章http://blog.csdn.net/chazihong/article/details/74351963
想实现CollapsingToolbarLayout中的title,在整个展开时不显示title,在整体收缩状态时显示title。
这里写图片描述

对AppBarLayout控件进行监听,分为三种状态进行监听。
EXPANDED, // 展开
COLLAPSED, // 折叠
IDLE // 其他

首先,创建AppBarStateChangedListener抽象类继承AppBarLayout.OnOffsetChangedListener,并重写onOffsetChanged方法。

package com.example.administrator.coordinatordemo;import android.support.design.widget.AppBarLayout;/** * Created by Administrator on 2017/7/4. */public abstract class AppBarStateChangedListener implements AppBarLayout.OnOffsetChangedListener {    // AppBar状态    public enum State {        EXPANDED,     // 展开        COLLAPSED,    // 折叠        IDLE          // 其他    }    private State mCurrentState = State.IDLE;    @Override    public void onOffsetChanged(AppBarLayout appBarLayout, int i) {        if (i == 0) {            if (mCurrentState != State.EXPANDED) {                onStateChanged(appBarLayout, State.EXPANDED);            }            mCurrentState = State.EXPANDED;        } else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {            if (mCurrentState != State.COLLAPSED) {                onStateChanged(appBarLayout, State.COLLAPSED);            }            mCurrentState = State.COLLAPSED;        } else {            if (mCurrentState != State.IDLE) {                onStateChanged(appBarLayout, State.IDLE);            }            mCurrentState = State.IDLE;        }    }    public abstract void onStateChanged(AppBarLayout appBarLayout, State state);}

在MainActivity.java中,给AppBarLayout控件添加监听。

     appBarLayout.addOnOffsetChangedListener(new AppBarStateChangedListener() {            @Override            public void onStateChanged(AppBarLayout appBarLayout, State state) {                // 展开状态                if (state == State.EXPANDED) {                    toolbarLayout.setTitle("");                } else if (state == State.COLLAPSED) {                    toolbarLayout.setTitle("JacksonYi");                } else {                    toolbarLayout.setTitle("");                }            }        });

在状态改变时,进行响应的逻辑处理。这里就是简单的处理title是否显示。