解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果

简介: 解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果

动态的解决 toolbar 和 状态栏 重叠,并且设置 toolbar 的渐变:


1,解决toolbar的 重叠,自动适配屏幕


只需要 获取一下状态栏的高度,然后让toobar 位于他的下方即可。


/**
 * Copyright (C)
 *
 * @file: StatusBarHeight
 * @author: 345
 * @Time: 2019/4/30 11:39
 * @description: 获取 状态栏的高度 和转换
 */
public class StatusBarHeight {
    /**
     * @return 返回 状态栏的 高度,以像素为单位
     */
    public static int getStaticBarHeight(){
        int result = 0;
        int resourceId = Latte.getApplication().getResources().getIdentifier("status_bar_height",
                "dimen","android");
        if (resourceId > 0){
            result = Latte.getApplication().getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
    /**
     *  根据手机的分辨率 从 px(像素)的单位 转换为 dp
     * @param pxValue
     * @return
     */
    public static int px2dip(float pxValue){
        final float scale = Latte.getApplication().getResources().getDisplayMetrics().density;
        return (int) (pxValue/scale+0.5f);
    }
    /**
     * 根据手机的分辨路 从 dp单位 转换为 px(像素)
     */
    private static int dip2px(float dipValue){
        final float scale = Latte.getApplication().getResources().getDisplayMetrics().density;
        return (int) (dipValue*scale+0.5f);
    }
}


//获取 状态栏的高度,以像素为单位
int statusBar = StatusBarHeight.getStaticBarHeight();
//设置toolbar 位于 状态栏 的下方,并且距底部 20个像素
//注意:toolbar的布局中高度只能是 wrap_content
mToobar.setPadding(0,statusBar,0,20);


注意 布局中 toolbar 的高度 不能是死值,要设置为 wrap_content


2,在 RecyclerView 中设置toolbar 的渐变


mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
    }
    @SuppressLint("ResourceAsColor")
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        //判断是 RecyclerView 是否位于顶部
        boolean flag = recyclerView.canScrollVertically(-1);
        int  toolbarHeight = mToobar.getHeight();
        mDy += dy;
        if (!flag){
            //位于顶部 ,则设置颜色 透明
            mToobar.setBackgroundColor(android.R.color.transparent);
        }
        else {
            //否则 设置渐变
            if (mDy >toolbarHeight){
                mToobar.setBackgroundColor(Color.rgb(255,124,2));
            }else if (mDy >0&& mDy <= toolbarHeight) {
                final float scale =(float) mDy / toolbarHeight;
                final float alpha = scale * 255;
                mToobar.setBackgroundColor(Color.argb((int)alpha,255,124,2));
            }
        }
    }
});


其中 mDy 为 全局int 变量,初始值 为0;


相关文章
|
C++
C/C++ Qt StatusBar 底部状态栏应用
Qt窗体中默认会附加一个QstatusBar组件,状态栏组件位于主窗体的最下方,其作用是提供一个工具提示功能,当程序中有提示信息是可以动态的显示在这个区域内,状态栏组件内可以增加任何Qt中的通用组件,只需要通过`addWidget`函数动态追加即可引入到底部,底部状态栏在实际开发中应用非常普遍,以下代码是对该组件基本使用方法的总结。
396 0
C/C++ Qt StatusBar 底部状态栏应用
AppBarLayout 折叠之后有阴影?
AppBarLayout 折叠之后有阴影?
104 0
|
Android开发
如何去掉listview滑动时的阴影
如何去掉listview滑动时的阴影
如何去掉listview滑动时的阴影
|
Android开发
Android隐藏Listview和RecyclerView 滑动边界的阴影,去除滚动条加分隔线等
Android隐藏Listview和RecyclerView 滑动边界的阴影,去除滚动条加分隔线等
171 0
|
XML Android开发 数据格式
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏                                            先看效果图。
2829 0
|
Android开发
Android 自定义控件之SlidingMenuVertical顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)
顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)
2016 0
|
XML Android开发 数据格式
Android标题栏随着滑动显示隐藏
这次实现标题栏随着上滑下滑显示隐藏 实现这个效果需要,Support Design库中的CoordinatorLayout和AppBarLayout进行配合才行。
3242 0
|
前端开发 Android开发 容器
Android自定义Tablayout下划线指示器Indicator:设置宽高、圆角、渐变颜色
Android自定义Tablayout下划线指示器Indicator:设置宽高、圆角、渐变颜色 Android原生的Tablayout下面有一个指示器(指示线、下划线),如图所示:详情见附录1。
5926 0
|
Android开发
android:elevation属性,控制View底部渐变阴影
android:elevation属性,控制View底部渐变阴影 android:elevation这一属性,可以控制View底部渐变阴影,给一个View在其底部增加一定的灰度渐变阴影效果,如图: 上图是一个简单的TextView,TextView底部阴影渐变。
2588 0