网站建设 技术要求,建网站需要几程序员,网页设计实验总结与体会,开源 网站开发框架前言本文主要给大家介绍了关于Android如何实现状态栏白底黑字的相关内容#xff0c;分享出来供大家参考学习#xff0c;下面话不多说了#xff0c;来一起看看详细的介绍吧。一、描述在项目中有的时候Ui设计状态栏背景颜色是白色的#xff0c;虽然还挺好看#xff0c;不过可…前言本文主要给大家介绍了关于Android如何实现状态栏白底黑字的相关内容分享出来供大家参考学习下面话不多说了来一起看看详细的介绍吧。一、描述在项目中有的时候Ui设计状态栏背景颜色是白色的虽然还挺好看不过可坑了我们做程序的需要对很多机型进行适配此文章列举了兼容多个机型版本的状态栏方案。二、状态栏1 只要设置下面的代码即可我是放在BaseActivtiy里面用的StatusBarUtil.transparencyBar(this); //设置状态栏全透明StatusBarUtil.StatusBarLightMode(this); //设置白底黑字2 状态栏兼容类直接Copy即可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);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);} else if (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以上版本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, true)) {//小米result 1;} else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) {//魅族result 2;} else if (Build.VERSION.SDK_INT Build.VERSION_CODES.M) {//6.0以上activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);result 3;} else {//其他的都设置状态栏成半透明的,以下设置半透明是调用第三方的根据个人需求更改// ImmersionBar.with(activity).statusBarDarkFont(true, 0.5f).init();}}return result;}/*** 设置状态栏图标为深色和魅族特定的文字风格* 可以用来判断是否为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 activity* param dark 是否把状态栏文字及图标颜色设置为深色* return boolean 成功执行返回true*/public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {boolean result false;Window window activity.getWindow();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;if (Build.VERSION.SDK_INT Build.VERSION_CODES.M) {//开发版 7.7.13 及以后版本采用了系统API旧方法无效但不会报错所以两个方式都要加上if (dark) {activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);} else {activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);}}} catch (Exception e) {}}return result;}}白底黑字半透明效果三、注意事项在适配中有遇到一个 华为EMUI3.1 的手机设置上后有出现一些异常问题我看有的第三方库也有对这个版本单独进行处理应该是有点问题所以我在项目中就直接屏蔽了这个版本的适配。四、相关资料五、总结此文章的工具类是从其他地方Copy来精简了一些没有用到的代码如果需要其他代码的从第四点的链接进入查看就好这类代码都是Copy来Copy去的也找不到原创在哪了。。好了以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作具有一定的参考学习价值如果有疑问大家可以留言交流谢谢大家对脚本之家的支持。