1.在build.gradle引入依赖

    implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'

2.导入工具类

package com.example.toolbarapplication;import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;import com.readystatesoftware.systembartint.SystemBarTintManager;import java.lang.reflect.Field;
import java.lang.reflect.Method;/*** @Author: david.lvfujiang* @Date: 2019/12/13* @Describe:*/public class StatusBarUtil {/*** 修改状态栏为全透明* @param activity*/@TargetApi(19)public static void transparencyBar(Activity activity){if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = activity.getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);window.setNavigationBarColor(Color.TRANSPARENT);} elseif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Window window =activity.getWindow();window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}}/*** 修改状态栏颜色,支持4.4以上版本* @param activity* @param colorId*/public static void setStatusBarColor(Activity activity, int colorId) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = activity.getWindow();
//      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(activity.getResources().getColor(colorId));} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明transparencyBar(activity);SystemBarTintManager tintManager = new SystemBarTintManager(activity);tintManager.setStatusBarTintEnabled(true);tintManager.setStatusBarTintResource(colorId);}}/***设置状态栏黑色字体图标,* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android* @param activity* @return 1:MIUUI 2:Flyme 3:android6.0*/public static int StatusBarLightMode(Activity activity){int result=0;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {if(MIUISetStatusBarLightMode(activity.getWindow(), true)){result=1;}else if(FlymeSetStatusBarLightMode(activity.getWindow(), true)){result=2;}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);result=3;}}return result;}/*** 已知系统类型时,设置状态栏黑色字体图标。* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android* @param activity* @param type 1:MIUUI 2:Flyme 3:android6.0*/public static void StatusBarLightMode(Activity activity, int type){if(type==1){MIUISetStatusBarLightMode(activity.getWindow(), true);}else if(type==2){FlymeSetStatusBarLightMode(activity.getWindow(), true);}else if(type==3){activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}/*** 清除MIUI或flyme或6.0以上版本状态栏黑色字体*/public static void StatusBarDarkMode(Activity activity, int type){if(type==1){MIUISetStatusBarLightMode(activity.getWindow(), false);}else if(type==2){FlymeSetStatusBarLightMode(activity.getWindow(), false);}else if(type==3){activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);}}/*** 设置状态栏图标为深色和魅族特定的文字风格* 可以用来判断是否为Flyme用户* @param window 需要设置的窗口* @param dark 是否把状态栏字体及图标颜色设置为深色* @return  boolean 成功执行返回true**/public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {boolean result = false;if (window != null) {try {WindowManager.LayoutParams lp = window.getAttributes();Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");darkFlag.setAccessible(true);meizuFlags.setAccessible(true);int bit = darkFlag.getInt(null);int value = meizuFlags.getInt(lp);if (dark) {value |= bit;} else {value &= ~bit;}meizuFlags.setInt(lp, value);window.setAttributes(lp);result = true;} catch (Exception e) {}}return result;}/*** 设置状态栏字体图标为深色,需要MIUIV6以上* @param window 需要设置的窗口* @param dark 是否把状态栏字体及图标颜色设置为深色* @return  boolean 成功执行返回true**/public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {boolean result = false;if (window != null) {Class clazz = window.getClass();try {int darkModeFlag = 0;Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");darkModeFlag = field.getInt(layoutParams);Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);if(dark){extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体}else{extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体}result=true;}catch (Exception e){}}return result;}/*** 谷歌原生修改状态栏字体颜色* @param activity* @param dark*/public static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) {View decor = activity.getWindow().getDecorView();if (dark) {decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);} else {decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);}}}

3.在acctivity的setContentView()方法后调用

 //支持状态栏透明StatusBarUtil.transparencyBar(this);//使用谷歌原生方式修改状态栏颜色StatusBarUtil.setAndroidNativeLightStatusBar(this,true);

4.因为我们的去掉状态栏之后我们的标题或者布局会顶到状态栏,因此我们需要在xml中给根布局或Toolbar设置android:fitsSystemWindows="true"
android:fitsSystemWindows的作用是给布局或者Toolbar设置一个状态栏高度的paddingTop

android开发:一个工具类搞定所有机型实现沉浸式状态栏相关推荐

  1. Android开发常用工具类集合

    转载自:https://blog.csdn.net/xiaoyi_tdcq/article/details/52902844 Android开发常用工具类集合 android开发中为了避免重复造轮子, ...

  2. android开发常用工具类、高仿客户端、附近厕所、验证码助手、相机图片处理等源码...

    Android精选源码 android开发过程经常要用的工具类源码 Android类似QQ空间个人主页下拉头部放大的布局效果 Android高仿煎蛋客户端,Android完整项目 android帮你找 ...

  3. android开发常用工具类、高仿客户端、附近厕所、验证码助手、相机图片处理等源码

    Android精选源码 android开发过程经常要用的工具类源码 Android类似QQ空间个人主页下拉头部放大的布局效果 Android高仿煎蛋客户端,Android完整项目 android帮你找 ...

  4. Android开发辅助工具类 Utils

    包括了各种工具类.辅助类.管理类等    都可以 在Git  里找到代码 来研究,深入 Awesome_API: https://github.com/marktony/Awesome_API/blo ...

  5. Android开发辅助工具类 Utils 汇总

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  6. 扔掉 Postman,一个工具全部搞定,真香!

    今日推荐 论异步编程的正确姿势:十个接口的活现在只需要一个接口就能搞定!让SpringBoot不再需要Controller.Service.Mapper,这款开源工具绝了!「吐血」我把 10 年的全部 ...

  7. Android开发常用工具类

    来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...

  8. (转)Android开发常用工具类

    原地址:http://blog.csdn.net/axi295309066/article/details/52884973 不管是前端,后端,还是我们的Android开发,实际工作中都会用到很多的工 ...

  9. 网络请求以及网络请求下载图片的工具类 android开发java工具类

    2019独角兽企业重金招聘Python工程师标准>>> package cc.jiusan.www.utils;import org.apache.http.HttpEntity; ...

最新文章

  1. 虚拟化--图解交互式方式安装ESXi_5.0的过程
  2. Latex(一)公式自动编号与自动引用
  3. mysql 优化配置 大批量数据插入_php导入大量数据到mysql性能优化技巧
  4. 嵌入式常见笔试题总结(5)
  5. freecodecamp_freeCodeCamp的服务条款
  6. CODE[VS] 1346 HelloWorld编译器
  7. idea 导入到码云
  8. 最早使用计算机领域,第2章 交换单元及交换网络(2.3.4).ppt
  9. 如何设计最惊艳的PPT
  10. xp系统安装金蝶k3服务器配置,xp安装金蝶k3安全设置.doc
  11. Flutter插件shared_preferences数据存储的使用
  12. Java课程设计学生考勤管理
  13. php自动驾驶面试题,一篇文章看懂“L0-L5”,自动驾驶分级标准最强解读
  14. 关于SQL Server中将数值类型转换为字符串的问题
  15. Java之图片裁剪工具类-yellowcong
  16. 动词ing基本用法_(完整版)英语动词ing的用法
  17. 牛客网JS(nodeJS)单行、多行输入和输出
  18. linux安装ntp 4.2.8,Centos6 安装NTP 4.2.8 服务器
  19. 如何在电脑中下载cctv中的视频
  20. Photoshop 2022版

热门文章

  1. 隐藏NavigationBar
  2. linux pkill窗口,Linux基础:pkill命令总结
  3. 数商云:SCM系统助力医疗器械企业紧跟时代变局 搭建供应链管理平台
  4. 《灰色系统理论及应用》第8章 离散灰色预测模型 例8.1.1
  5. 阿里云盘每日定时签到,无需服务器
  6. 使用 C# 开发的摸鱼背单词软件 ToastFish
  7. 牛客练习赛9。 B 柯朵莉的值域连续端
  8. 【TSC技术标准】BSV技术标准委员会首个进入推荐阶段的技术标准
  9. TFT-LCD移植LVGL详细过程记录
  10. 正则表达式(python)