这是个老话题了,不纠结叫法了。勿怒,一起来看看那些坑。


从android 4.4起,系统提供了这个功能。到5.0之后,系统有改进了,更好用了。

//LOLLIPOP   21  5.0        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            View decorView = activity.getWindow().getDecorView();            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                //状态栏浅色字体                option |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;            }            decorView.setSystemUiVisibility(option);            activity.getWindow().setStatusBarColor(statusColor);            return;        }

5.0以上系统,只需要这段代码即可,直接修改状态栏颜色。

但是对于4.4~5.0之间的系统,不好弄。网上各位大神提供了很好的建议,说创建一个与状态栏等高的view,色后缀颜色不就可以了。真的?来看效果图。

Android沉浸式状态栏(透明状态栏)_第1张图片

这是怎么了,我的二锅头。 有人说,来个marginTop或者在当前Activity的根布局加代码android:fitsSystemWindows="true"不就可以了吗! 真的?来看图:



Android沉浸式状态栏(透明状态栏)_第2张图片


虽然这颜色很刺眼,但是效果还是很明显的。不成。于是我这么干的:

//KITKAT   19  4.4        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            View decorView = activity.getWindow().getDecorView();            int option = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;//透明状态栏            option |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;//留出状态栏空间            decorView.setSystemUiVisibility(option);            decorView.setBackgroundColor(statusColor);        }
还可以,只是效果有一点差异,即状态栏的颜色与正宗的颜色有一点灰色透明度差异。略加黑了,也是公认的效果了。


Android沉浸式状态栏(透明状态栏)_第3张图片


下面贴一下工具类:

/** * @Author: duke * @DateTime: 2017-06-15 09:51 * @Description: 沉浸式状态栏工具类 
* Your should decide if the root layout need to add property android:fitsSystemWindows="true" */public class ImmersiveStatusBarCompat { public static void immersive(Activity activity) { immersive(activity, Color.TRANSPARENT); } /** * @param activity * @param statusColor 状态栏颜色 */ public static void immersive(Activity activity, int statusColor) { if (activity == null) { throw new IllegalArgumentException("activity is null"); } //LOLLIPOP 21 5.0 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { View decorView = activity.getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //状态栏浅色字体 option |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } decorView.setSystemUiVisibility(option); activity.getWindow().setStatusBarColor(statusColor); return; } //KITKAT 19 4.4 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { View decorView = activity.getWindow().getDecorView(); int option = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;//透明状态栏 option |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;//留出状态栏空间 decorView.setSystemUiVisibility(option); decorView.setBackgroundColor(statusColor); } } public static void hideNavigation(Activity activity) { if (activity == null) { throw new IllegalArgumentException("activity is null"); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { View decorView = activity.getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(option); activity.getWindow().setNavigationBarColor(Color.TRANSPARENT); return; } } /** * 获取状态栏高度 * * @param context * @return */ public static int getStatusBarHeight(Context context) { if (context == null) { return 0; } int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); return context.getResources().getDimensionPixelSize(resourceId); }}


用法呢,一样简单:

layout跟布局加属性:android:fitsSystemWindows="true"在activity中@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_immersive);    ImmersiveStatusBarCompat.immersive(this, Color.parseColor("#00ff00"));}










更多相关文章

  1. Android Studio 修改 Logcat 颜色
  2. 修改系统Android版本,版本号
  3. android图像处理系统1.3
  4. android启动后根文件系统分析
  5. Android系统下如何在程序中对XML里面元素进行赋值
  6. android 包管理系统分析
  7. Android查看系统信息
  8. Android 系统广播Action一览验证
  9. 获取Android系统信息

随机推荐

  1. android 横竖屏切换属性和播放视频全屏切
  2. AndroidManifest配置文件介绍
  3. android中的目录结构
  4. android sdk离线升级方法
  5. android:imeOptions属性
  6. [置顶] Android平板、TV中对GridView的优
  7. android 快速入门
  8. Android应用的基本原理
  9. Android横竖屏切换
  10. 仿写android音乐播放器的问题