设置状态栏:http://blog.csdn.net/maosidiaoxian/article/details/51734895
设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上
android 4.4.2新增了一个特性,可以设置系统状态栏为半透明。
实现方式一是在主题style中添加以下属性:
实现方式二是在Java代码中设置,即以下代码:
实现的后的效果就相当于将整个屏幕放在一个帧布局中,状态栏在上部,我们的界面在下部,而状态栏还是透明的效果
若希望将状态栏不挡住我们的界面,还要定义一种颜色效果,可以在我们的界面顶部添加一个和状态栏相同高度的view,背景设置成我们希望的背景。
通过往Window窗口的decorView添加一个View,让它大小与系统状态栏一样,然后设置这个view的背景,就可以实现修改状态栏颜色的效果了
ViewGroup decorViewGroup = (ViewGroup) window.getDecorView();
View statusBarView = new View(window.getContext());
int statusBarHeight = getStatusBarHeight(window.getContext());
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, statusBarHeight);
params.gravity = Gravity.TOP;
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(color);
decorViewGroup.addView(statusBarView);
获取状态栏高度的方法代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
然后在我们的Activity的onCreate方法中使用以上代码就可以了。
Android 5.0.1(API 21)
window.setStatusBarColor(color);
使它生效,必须设置一个FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
属性,并且确保FLAG_TRANSLUCENT_STATUS
不被设置
Window window = activity.getWindow(); //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏颜色
window.setStatusBarColor(color);
Android 6.0
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏颜色
window.setStatusBarColor(color);
由于与API 19设置状态栏半透明并添加一个View的实现方式不同,这里是直接设置状态栏的颜色的,所以如果我们的状态栏被设为白色的话,
上面同样白色的系统状态就看不到了。不过,6.0的API新增了一个属性来解决这一问题。即,
如果我们设置的状态栏颜色是接近于白色的话,可以在主题中添加以下属性:
- 1
- 1
这样,系统状态的那些文字图标就会变成黑色了,如一开始我们所看到的第三张图。
通过JAVA代码来设置的话如下:
沉浸式模式:
http://blog.csdn.net/guolin_blog/article/details/51763825
状态栏的使用:http://blog.csdn.net/ruancoder/article/details/54571720