这是我根据手机不同的版本,不同API设置状态栏的几种方法,总结了一个工具类,希望对大家有帮助,拿走不谢!!!

public class StatusBarManager {/*** 仅仅让状态栏透明,布局类容位于状态下方*/public static void translucentStatusBar(Activity activity) {if (!SystemFacade.hasKitKat()) {return;}//如果系统版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是让系统状态栏为透明,同时系统会自动设置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了状态下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把状态栏设为可绘制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏为透明window.setStatusBarColor(Color.TRANSPARENT);}}/*** 改变状态栏为透明并让布局延伸到状态底部*/public static void immersive(Activity activity) {if (!SystemFacade.hasKitKat()) {return;}//如果系统版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是让系统状态栏为透明,同时系统会制动设置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了状态下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把状态栏设为可绘制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏为透明window.setStatusBarColor(Color.TRANSPARENT);//设置让布局延伸到状态栏下面window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}}/*** 改变状态栏为透明并让布局延伸到状态底部*/public static void translucentStatusBarAndImmersive(Activity activity) {if (!SystemFacade.hasKitKat()) {return;}//如果系统版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是让系统状态栏为透明,同时系统会制动设置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了状态下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把状态栏设为可绘制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏为透明window.setStatusBarColor(Color.TRANSPARENT);//设置让布局延伸到状态栏底部window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}}/*** 设置状态栏字体为灰色*/public static void lightStatusBar(Activity activity) {if (SystemFacade.hasM()) {int flag = activity.getWindow().getDecorView().getSystemUiVisibility();if ((flag | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) != flag) { // 如果状态栏字体不是灰色activity.getWindow().getDecorView().setSystemUiVisibility(flag ^ View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}}/*** 设置状态栏字体为白色*/public static void darkStatusBar(Activity activity) {if (SystemFacade.hasM()) {int flag = activity.getWindow().getDecorView().getSystemUiVisibility();if ((flag | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) == flag) { // 如果状态栏字体不是白色//flag &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;//activity.getWindow().getDecorView().setSystemUiVisibility(flag);activity.getWindow().getDecorView().setSystemUiVisibility(flag ^ View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}}/*** 设置状态栏颜色*/public static void setStatusBarColor(Activity activity, int color) {if (!SystemFacade.hasKitKat()) {return;}//如果系统版本大于API 19 小于 API 小于 API 21if (SystemFacade.hasKitKat() && !SystemFacade.hasLollipop()) {Window window = activity.getWindow();//在 4.4 api 19 和 API 20 添加FLAG_TRANSLUCENT_STATUS 是让系统状态栏为透明,同时系统会制动设置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE//所以布局延伸到了状态下面window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);createOrChangeMockStatusBarColor(activity, color);ViewGroup contentView = activity.getWindow().findViewById(android.R.id.content);View rootView = contentView.getChildAt(0);if (rootView != null) {rootView.setFitsSystemWindows(true);}} else if (SystemFacade.hasLollipop()) {Window window = activity.getWindow();//添加Flag把状态栏设为可绘制模式window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏颜色window.setStatusBarColor(color);}}/*** 因此底部导航栏,*/public static void hideNavigationBar(Activity activity) {//隐藏虚拟按键,并且全屏if (Build.VERSION.SDK_INT < 19) { // lower apiView v = activity.getWindow().getDecorView();v.setSystemUiVisibility(View.GONE);} else {//for new api versions.View decorView = activity.getWindow().getDecorView();// 如果不设置SYSTEM_UI_FLAG_IMMERSIVE_STICKY ,那么在点击屏幕时候底部导航栏会弹出,相当于View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 不起作用,被清除int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);}}private static final String MOCK_STATUS_BAR_VIEW = "mock_status_bar";private static void createOrChangeMockStatusBarColor(Activity activity, int color) {Window window = activity.getWindow();ViewGroup mDecorView = (ViewGroup) window.getDecorView();View fakeView = mDecorView.findViewWithTag(MOCK_STATUS_BAR_VIEW);if (fakeView != null) {fakeView.setBackgroundColor(color);} else {View mockView = new View(activity);FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, SystemFacade.getScreenHeight(activity));layoutParams.gravity = Gravity.TOP;mockView.setLayoutParams(layoutParams);mockView.setBackgroundColor(color);mockView.setTag(MOCK_STATUS_BAR_VIEW);mDecorView.addView(mockView);}}private boolean isXiaomi(String brand) {return brand.contains("xiaomi");}private boolean isMeizu(String brand) {return brand.contains("meizu");}}

状态栏的工具类(支持多种版本类型)相关推荐

  1. 好用的对象转xml、xml转对象工具类-支持集合嵌套转换(Java实现)

    好用的对象转xml.xml转对象工具类-支持集合嵌套转换(Java实现) 网上找了很多转换工具,对于自己的业务都不是很合适,所以总结了一下网上的方案,最终定下来是这样子的,主要使用dom4j做操作 m ...

  2. excel工具类 支持2003、2007、2010、2013

    excel工具类  支持2003.2007.2010.2013 引入包: poi-3.7-20101029.jar poi-examples-3.7-20101029.jar poi-ooxml-3. ...

  3. 工具类集和_gblfy版本

    日常工具类集和 gblfy版本 Cookie CookieUtil.java BigDecimal BigDecimalUtil.java 日期 DateTimeUtil.java FTP FTPUt ...

  4. 文件选择器看这个就够了—轻量级、支持多种文件类型

    一款轻量级的文件选择器,支持多种文件类型 本项目所使用的库为: Android-FilePicker PhotoView Glide 使用步骤: 第一步导入: compile 'com.vincent ...

  5. java常用地图坐标系转换工具类,支持谷歌,腾讯,百度等主流的地理坐标转换

    package com.shen.springboot.redis.util;import java.util.ArrayList; import java.util.HashMap; import ...

  6. Windows下一键搭建MBP系统,支持多种版本任意选择,免费永久使用,多系统使用新方案

    Windows下一键搭建MBP系统,支持多种版本任意选择,免费永久使用,多系统使用新方案. 安装起来相当的简单,简单到只需要执行一行命令即可完成.使得游戏和开发可以兼顾,并且不用花费数万米的可以使用M ...

  7. 【工具篇】java导出excel工具类,多种模式自动配置,绝对值得你收藏

    文章目录 项目环境: 实现功能: 工具类实现 定义参数bean:ExportExcelBean.java 定义导出excel的表格主题:ExportExcelTheme.java [重点]导出exce ...

  8. poi/jxls导入/导出Excel工具类(支持2003和2007)

    1.ExportUtil导出工具类(根据模板导出),支持2003/2007不同excel格式文件 package org.nercita.bcp.util;import java.io.FileInp ...

  9. linux系统可支持多种文件系统类型,Linux文件系统类型简介及支持的文件系统汇总--Linux入门到精通系列...

    不同的操作系统需要使用不同类型的文件系统,为了与其他操作系统兼容,以相互交换数据,通常操作系统都能支持多种类型的文件系统,比如Windows 2000 Server,系统默认或推荐采用的文件系统是NT ...

最新文章

  1. 《社交网站界面设计(原书第2版)》——2.13 不要中断电子邮件
  2. 机器学习笔记:过拟合和欠拟合
  3. Ansible Playbook核心元素以及组件
  4. C#任务调度——LimitedConcurrencyLevelTaskScheduler
  5. JQuery中常用方法备忘
  6. flume hdfs sink 文件滚动策略
  7. page compaction原理
  8. html经过菜单变色移开恢复,h5学习笔记:transition菜单过渡变色
  9. 全国 下拉框 选项值:35个省级行政区
  10. 5款工具帮你一键快速图片去水印(附送复杂水印去除教程)
  11. 交换机的工作原理和功能
  12. 深入浅出理解 MyBatis-Plus(最新版3.5.2)
  13. 小程序功能(七)电子签名
  14. 自主移动机器人常用的导航定位技术及原理
  15. Git之深入解析如何替换数据库中的Git对象
  16. JS逆向字体反爬,某供应商平台反爬实践
  17. Live Wallpaper Themes 4K Pro:4K超清动态壁纸
  18. pokemon 下载 android,Pokemon Home
  19. PDF格式转换器官方免费下载
  20. 全国300城市车辆违章查询sdk分享

热门文章

  1. 1-13 格式化输出
  2. 弘辽科技:一元秒杀重回抖音直播间,一切都是流量“惹的祸”
  3. 技术Leader的30个套路
  4. a标签实现文件下载(ie8可用)
  5. 什么叫真正的IT男?
  6. 软件自动化测试简介,1.1 自动化测试简介
  7. wincc历史数据库_wincc查询历史报警记录,归档数据
  8. 鼠绘-汽车侧面绘制过程
  9. 如何在30分钟完成表格增删改查的前后端框架搭建
  10. Mysql高可用集群搭建(一)一主两从服务搭建