Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yangchong211/YCStatusBar

关于状态栏方案总结案例,适合于绝大多数的使用场景……同时,兼容了小米,魅族等手机状态栏字体颜色设置失效问题。已经用于实际项目投资界,新芽,沙丘大学等APP,一键集成并使用!支持单Activity多Fragment动态修改状态栏颜色,入侵性低,一行代码即可实现你需要的需求
https://github.com/yangchong211/YCStatusBar

Last synced: 5 days ago
JSON representation

关于状态栏方案总结案例,适合于绝大多数的使用场景……同时,兼容了小米,魅族等手机状态栏字体颜色设置失效问题。已经用于实际项目投资界,新芽,沙丘大学等APP,一键集成并使用!支持单Activity多Fragment动态修改状态栏颜色,入侵性低,一行代码即可实现你需要的需求

Awesome Lists containing this project

README

        

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

### 0.说明
- **状态栏工具类,应该可以满足绝大多数的使用场景。具体可以参考代码案例,欢迎star!!**
- 1.[技术博客汇总](https://www.jianshu.com/p/614cb839182c)
- 2.[开源项目汇总](https://blog.csdn.net/m0_37700275/article/details/80863574)
- 3.[生活博客汇总](https://blog.csdn.net/m0_37700275/article/details/79832978)
- 4.[喜马拉雅音频汇总](https://www.jianshu.com/p/f665de16d1eb)
- 5.[其他汇总](https://www.jianshu.com/p/53017c3fc75d)

### 1.关于如何集成
- 在gradle中添加:
```
implementation 'com.github.yangchong211.YCStatusBar:StatusBarLib:1.4.6'
```
- 项目地址:https://github.com/yangchong211/YCStatusBar
- ![image](https://github.com/yangchong211/YCStatusBar/blob/master/image/image1.jpg)
- ![image](https://github.com/yangchong211/YCStatusBar/blob/master/image/statusBar.gif)

### 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.状态栏系列文档
- [01.状态栏基础介绍]()
- 01.透明状态栏和沉浸式
- 02.theme主题对状态栏影响
- 03.如何给状态栏着色
- 04.注意4.4状态栏着色
- 05.如何设置状态栏透明
- 06.状态栏不占位的问题
- 07.修改状态栏文字颜色
- [02.状态栏属性深入分析]()
- 01.状态栏的发展过程介绍
- 02.android6.0状态栏内容不见
- 03.setSystemUiVisibility
- 04.fitsSystemWindows深入分析

### 6.关于其他介绍
#### 关于我的博客
- github:https://github.com/yangchong211
- 知乎:https://www.zhihu.com/people/yczbj/activities
- 简书:http://www.jianshu.com/u/b7b2c6ed9284
- csdn:http://my.csdn.net/m0_37700275
- 喜马拉雅听书:http://www.ximalaya.com/zhubo/71989305/
- 开源中国:https://my.oschina.net/zbj1618/blog
- 泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
- 邮箱:[email protected]
- 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100- 239.headeruserinfo.3.dT4bcV
- segmentfault头条:https://segmentfault.com/u/xiangjianyu/articles
- 掘金:https://juejin.im/user/5939433efe88c2006afa0c6e