Skip to content
关于状态栏方案总结案例,适合于绝大多数的使用场景……积累了业余阅读代码中的状态栏工具类,并且整理和去除了无效的代码。已经用于实际项目投资界,新芽,沙丘大学等APP,一键集成并使用!支持单Activity多Fragment动态修改状态栏颜色,入侵性低,一行代码即可实现你需要的需求
Branch: master
Clone or download
Latest commit 13f02f7 Apr 1, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea 添加单Activity多Fragment动态修改状态栏颜色 Sep 1, 2018
YCStatusBarLib 修改bug Oct 8, 2018
app 修改bug Oct 8, 2018
gradle/wrapper YCStatusBar Mar 8, 2018
image 更新readme Apr 1, 2019
.gitignore YCStatusBar Mar 15, 2018
README.md 更新readme Apr 1, 2019
build.gradle YCStatusBar Mar 15, 2018
gradle.properties YCStatusBar Mar 8, 2018
gradlew YCStatusBar Mar 8, 2018
gradlew.bat YCStatusBar Mar 8, 2018
settings.gradle YCStatusBar Mar 8, 2018

README.md

目录介绍

  • 1.关于如何集成
  • 2.关于如何使用
  • 3.关于鸣谢
  • 4.关于版本更新说明
  • 5.出现的bug及解决方案
  • 6.关于其他介绍

0.说明

1.关于如何集成

2.关于如何使用

  • 2.1.1 DrawerLayout设置状态栏
//为DrawerLayout 布局设置状态栏颜色,纯色
DlStatusBar.setColorNoTranslucentForDrawerLayout(this, drawerLayout,getResources().getColor(R.color.colorTheme));
//为DrawerLayout 布局设置状态栏变色,也就是加上透明度
DlStatusBar.setColorForDrawerLayout(this, drawerLayout,getResources().getColor(R.color.colorTheme), 0);
  • 2.1.2 设置状态栏颜色
StateAppBar.setStatusBarColor(this, ContextCompat.getColor(this, R.color.colorAccent));
  • 2.1.3 设置状态栏和toolbar颜色
  • 注意,如果是设置白色的话,则需要单独设置状态栏字体的颜色,否则看不见
  • 如果要设置状态栏为白色:则直接可以使用2.7中的方法
StateAppBar.setStatusBarColor(this, ContextCompat.getColor(this, R.color.colorAccent));
  • 2.1.4 设置状态栏透明
StateAppBar.translucentStatusBar(this, true);
  • 2.1.5 设置状态栏coordinatorLayout颜色
StateAppBar.setStatusBarColor(this, ContextCompat.getColor(this, R.color.colorPrimary));
  • 2.1.6 设置状态栏coordinatorLayout颜色透明
StateAppBar.setStatusBarColorForCollapsingToolbar(this, mAppBarLayout, collapsingToolbarLayout, toolbar, ContextCompat.getColor(this, R.color.colorPrimary));
  • 2.1.7 设置状态栏颜色为白色
StateAppBar.setStatusBarLightMode(this, Color.WHITE);
  • 2.1.8 设置状态栏和toolbar颜色为白色
StateAppBar.setStatusBarLightMode(this, Color.WHITE);
  • 2.1.9 设置状态栏和coordinatorLayout为白色
StateAppBar.setStatusBarLightForCollapsingToolbar(this, mAppBarLayout, collapsingToolbarLayout, toolbar, Color.WHITE);
  • 2.2.0 单Activity多Fragment动态修改状态栏颜色
  • 如果是单Activity多Fragment,由Fragment控制状态栏颜色的应用,有两种方案:
  • 1.由Activity控制状态栏背景颜色和字体颜色,提供方法供Fragment调用即可。
  • 2.首先设置Activity侵入状态栏,并设置状态栏为透明色,相当于隐藏Activity的状态栏, 然后在BaseFragment中封装状态栏,由Fragment控制自己的颜色即可; 但是状态栏字体颜色还是需要通过Activity控制。
  • 第一种方法:直接在activity中操作
//例如,ViewPager+TabLayout+Fragment中,很常见
@Override
public void onPageSelected(int position) {
    switch (position){
        case 0:
            //设置状态栏为黑色
            StateAppBar.setStatusBarColor(StatusBarFragmentActivity.this,
                    ContextCompat.getColor(StatusBarFragmentActivity.this,
                            R.color.colorTheme));
            break;
        case 1:
            //设置状态栏为红色
            StateAppBar.setStatusBarColor(StatusBarFragmentActivity.this,
                    ContextCompat.getColor(StatusBarFragmentActivity.this,
                            R.color.colorAccent));
            break;
        case 2:
            //设置状态栏为蓝色
            StateAppBar.setStatusBarColor(StatusBarFragmentActivity.this,
                    ContextCompat.getColor(StatusBarFragmentActivity.this,
                            R.color.colorPrimary));
            break;
        case 3:
            //设置状态栏为透明,相当于隐藏状态栏,也称之为沉浸式状态栏
            StateAppBar.translucentStatusBar(StatusBarFragmentActivity.this,
                    true);
            break;
        case 4:
            //设置状态栏为白色
            StateAppBar.setStatusBarColor(StatusBarFragmentActivity.this,
                    ContextCompat.getColor(StatusBarFragmentActivity.this,
                            R.color.white));
            //状态栏亮色模式,设置状态栏黑色文字、图标
            StatusBarUtils.StatusBarLightMode(StatusBarFragmentActivity.this);
            break;
    }
}
  • 第一种方法:activity和Fragment配合使用
    • 首先设置Activity侵入状态栏,并设置状态栏为透明色,相当于隐藏Activity的状态栏, 然后在BaseFragment中封装状态栏,由Fragment控制自己的颜色即可; 但是状态栏字体颜色还是需要通过Activity控制。
//在activity中
StateAppBar.translucentStatusBar(this,true);

//在fragment中
//判断是否展示—与ViewPager连用,进行左右切换
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
        if(activity!=null){
            StateAppBar.setStatusBarColor(activity, ContextCompat.getColor(activity, R.color.white));
            //状态栏亮色模式,设置状态栏黑色文字、图标
            //注意:如果是设置白色状态栏,则需要添加下面这句话。如果是设置其他的颜色,则可以不添加,状态栏大都默认是白色字体和图标
            StatusBarUtils.StatusBarLightMode(activity);
        }
    }//展示
}
  • 2.2.1 可以自由设置状态栏中的字体,图标颜色
    • 支持类型,1:MIUUI 2:Flyme 3:android6.0
    • 目前只是支持改变状态栏中字体图标为黑色,思考是否有可能改变其他颜色呢?
//状态栏亮色模式,设置状态栏黑色文字、图标
StatusBarUtils.StatusBarLightMode(StatusBarFragmentActivity.this);

3.关于鸣谢

  • 关于状态栏,是经过阅读一些项目慢慢总结而来的。
  • 非常方便使用,具体的用法都已经整理成demo,欢迎直接看代码,如果可以麻烦star!
  • 感谢开源前辈们的无私奉献……

4.关于版本更新说明

  • v0.0 更新于2016年3月9日
  • v1.0 更新于2017年9月8日
  • v1.1 更新于2017年12月5日
  • v1.3 更新于2018年3月16日
  • v1.3.1 更新于2018年9月1日
    • 添加了单Activity多Fragment动态修改状态栏颜色功能

5.出现的bug及解决方案,欢迎提出更多bug

  • 1.如果是在设置fragment中,有的是白色【或者其他色】,有的是透明色【就相当于隐藏了状态栏】,则还是会出现设置透明色无效
    • 解决办法:
    • 这其实更像是一个效果,而不是问题,透明色时应该显示了下面的Fragment的颜色,所以看起来无效。
    • 实际上每一个Activity的Window都有背景色,如果你把Activity的Window设置为透明色,也会出现这个效果,
    • 所以你应该给Fragment的RootView设置一个背景色,才能更像一个Activity,再设置透明色就没有问题了
  • 2.横屏状态栏问题
    • 比如视频播放器,横屏是需要隐藏状态栏,也可以成为透明状态栏,部分手机失效
    • 建议可以直接移除状态栏,可以参考我的视频播放器:https://github.com/yangchong211/YCVideoPlayer
  • 3.设置状态栏颜色无效
    • 状态栏字体颜色只适合6.0以上或者小米和魅族手机
  • 4.多个EditText会遮挡的问题
    • 最外层布局不要使用LinearLayout ,而需要使用scrollView
  • 5.弹出FragmentDialog的时候设置背景色变暗,状态栏的颜色变白
    • 如果是全屏的dialogFragment是可以修改状态栏字体颜色,其他情况都不可以修改

6.关于其他介绍

关于我的博客

You can’t perform that action at this time.