StatusView
介绍:
状态栏一体化,包括随着滑动渐变,透明状态栏,黑色字体的状态栏,兼容国产魅族、小米手机,其它手机使用标准模式。
运行效果:
使用说明:
我的主页:http://www.yanzhenjie.com
欢迎关注我的微博:http://weibo.com/yanzhenjieit
QQ技术交流群:547839514
如何使用
依赖本项目后,使用 StatusView和StatusUtils简单几行代码即可完成状态栏一体化。
依赖
- Gradle
compile 'com.yanzhenjie:statusview:1.0.3'
- Maven
<dependency>
<groupId>com.yanzhenjie</groupId>
<artifactId>statusview</artifactId>
<version>1.0.3</version>
<type>pom</type>
</dependency>
类和方法介绍
-
StatusView:用来替代系统的Status,开发者只需要把它布局在Layout的最顶部,控制它的background属性即可,其它都会自动处理。
-
Navi
gationView
:用来替代系统的虚拟Navigationi,开发者只需要把它布局在Layout的最底部,控制它的backgroud
属性即可,其它都会自动处理。 -
StatusUtils
:用来设置Activity
的状态栏和导航栏,这个类的方法要着重说明。
-
setStatusBarColor
:设置状态栏颜色。 -
setNavigationBarColor
:设置导航栏颜色。 -
setSystemBarColor
:同时设置状态栏、导航栏颜色,每个颜色可以单独指定。 -
setFullToStatusBar
:设置Activity
的ContentView
侵入到状态栏,并让状态栏透明,但是不会隐藏状态栏。 -
setFullToNavigationBar
:设置Activity
的ContentView
侵入到虚拟导航栏,并让导航栏透明,但是不会隐藏导航栏。 -
setStatusBarDarkFont:设置状态栏的字体为深色,一般用于当Toolbar和状态栏为浅色时(比如白色状态栏)。
图一效果实现
ContentView的顶部的第一个View放StatusView,然后调用setLayoutFullScreen把StatusView顶到状态栏下层,接下来就可以控制状态栏颜色了。
布局如下:
<LinearLayout android:id="@+id/root_layout">
<LinearLayout>
<com.yanzhenjie.statusview.StatusView
<!-- 宽高随便指定 -->
android:background="?attr/colorPrimary"
app:fitsView="@id/root_layout"/>
<android.support.v7.widget.Toolbar/>
</LinearLayout>
<.../>
</LinearLayout>
布局伪代码如上所示,app:fitsView="@id/root_layout"这个属性必须要指定,并且只能通过xml布局指定,它的作用是适配Android5.0以下时避免霸占了状态栏,但是不能修改状态栏颜色的问题。
接着在Activity#onCreate()中调用setFullToStatusBar:
setContentView(...);
StatusUtils.setFullToStatusBar(this); // StatusBar.
接下来随意修改状态栏颜色:
mStatusView.setBackgroundColor(Color.BLUE);
图二效果实现
使用FrameLayout作为root,底层放需要侵入状态栏的View,上层放StatusView,然后调用setLayoutFullScreen把StatusView顶到状态栏下层,接下来就可以控制状态栏的透明度了。
布局如下:
<FrameLayout android:id="@+id/root_layout">
<.../>
<LinearLayout>
<com.yanzhenjie.statusview.StatusView
<!-- 宽高随便指定 -->
android:background="?attr/colorPrimary"
app:fitsView="@id/root_layout"/>
<android.support.v7.widget.Toolbar/>
</LinearLayout>
</FrameLayout>
接着在Activity#onCreate()
中调用setFullToStatusBar
:
setContentView(...);
StatusUtils.setFullToStatusBar(this); // Layout full screen.
接下来随意修改状态栏的透明度:
mStatusView.getBackground().mutate().setAlpha(0~255); // 透明度值是\[0, 255\]。
图三效果实现
图三就比较简单了,因为它是修改状态栏的字体为深色:
StatusUtils.setStatusBarDarkFont(this, true); // Dark font for StatusBar.
因为仅仅在在6.0以后可以修改状态栏字体为深色字体,部分小米和魅族在6.0以下也支持修改状态栏字体为深色,所以这里要判断下:
if(StatusUtils.setStatusBarDarkFont(this, true)) {
// 成功设置深色字体后再设置状态栏为白色。
mStatusView.setBackgroundColor(Color.WHITE);
} else {
// 如果没成功设置为深色字体,那么状态栏用灰色或者黑色(可以理解为原生色)。
mStatusView.setBackgroundColor(Color.BLACK);
}
虚拟导航栏用法
用法和StatusView
相同,开发者只需要把它布局在Layout的最底部然后控制它的background
属性即可,这里不再例举,请查看Sample。