透明状态栏的效果有很多的app都有用到,效果图如下:
上图中是qq的消息界面,可以看到顶部的状态栏是透明化的。
接下来是实现步骤:
- 首先在创建一个类,这里命名为ImmersiveStatusbar.java,代码实现如下:
package com.xiaoke.accountsoft.util;
import android.app.ActionBar;
import android.graphics.Color;
import android.os.Build;
import android.view.View;
import android.view.Window;
/**
* Created by zouqi on 2017/4/15.
*/
public class ImmersiveStatusbar {
private static ImmersiveStatusbar immersiveStatusbar;
// 构造函数私有化
private ImmersiveStatusbar() {
}
// TODO: 2017/4/17 单例模式
public static ImmersiveStatusbar getInstance() {
if (immersiveStatusbar == null) {
// 加锁提高使用效率
synchronized (ImmersiveStatusbar.class) {
if (immersiveStatusbar == null) {
immersiveStatusbar = new ImmersiveStatusbar();
}
}
}
return immersiveStatusbar;
}
/***
* 状态栏透明化
* @param window Window对象
* @param actionBar ActionBar对象
*/
public void Immersive(Window window, ActionBar actionBar) {
if (Build.VERSION.SDK_INT >= 21) {
View view = window.getDecorView();
// TODO: 2017/4/13 两个FLAG一起使用表示会让应用的主体内容占用系统状态栏的时空间
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
view.setSystemUiVisibility(option);
// 将状态栏设置成透明色
window.setStatusBarColor(Color.TRANSPARENT);
}
// 将ActionBar隐藏
actionBar.hide();
}
}
上述代码较为简单,均有注释,理解起来不难。
但是需要注意的是我这里先进行了一层if判断,只有系统版本大于或等于5.0的时候才会执行上面的关键代码
另外注意:
调用上图所示标注的方法时需要导入V7包,不然会找不到该方法。
导入很简单,在gradle文件中添加依赖即可,如下图:
- 然后在你的活动类里面执行如下图所示的方法即可:
即活动设置使用的布局文件之后紧接方法:ImmersiveStatusbar.getInstance().Immersive(getWindow(), getActionBar());
这里要传入两个参数,一个是Window对象和ActionBar对象。
- 最后运行项目效果图如下所示:
透明状态栏效果成功的实现了。
================================================================