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


从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,色后缀颜色不就可以了。真的?来看效果图。


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





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

//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);        }
还可以,只是效果有一点差异,即状态栏的颜色与正宗的颜色有一点灰色透明度差异。略加黑了,也是公认的效果了。




下面贴一下工具类:

/** * @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(安卓)Bitmap换背景颜色
  3. android 颜色采摘
  4. 安卓shape属性详细介绍
  5. Android中颜色值列表
  6. android spinner 选中后显示字体的颜色设置
  7. android使用shape设置下边框
  8. android 沉浸式状态栏的三种方法
  9. Android(安卓)(shape,gradient)使用总结

随机推荐

  1. The ultimate Android(安卓)tethering gu
  2. Android应用开机自启
  3. intent-filter
  4. android 下的内存状态获取
  5. 安卓如何关闭软键盘?
  6. cts android.hardware.camera2.cts.Recor
  7. Android----imageView实现图片的旋转和缩
  8. Android之背景圆角矩形
  9. radioButton 使用
  10. android listveiw 嵌套Girdview