600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android 透明状态栏及设置状态栏字体颜色

Android 透明状态栏及设置状态栏字体颜色

时间:2019-01-04 02:05:45

相关推荐

Android 透明状态栏及设置状态栏字体颜色

参考链接/AmStrong_/article/details/78864613

沉浸式状态栏究其根本就是将布局内容延伸到状态栏中,让状态栏覆盖在布局上或者隐藏。 实现 首先,要修改状态栏android版本至少要在4.4以上,并且在4.4是不能让状态栏透明的,只能达到一种半透明的阴影背景,而在5.x的版本中,是可以修改背景颜色但无法修改字体颜色的,只有在6.0以上是可以随意修改的。但是在魅族和小米第三方ROM在4.4版本以上的手机都提供了修改的接口。所以具体的修改代码如下:

一.透明状态栏,高度为0

public static void setTranslucentStatus(Activity context, boolean flag) {//判断当前设备版本号是否为4.4以上,如果是,则通过调用setTranslucentStatus让状态栏变透明if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Window win = context.getWindow();WindowManager.LayoutParams winParams = win.getAttributes();final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;if (flag) {winParams.flags |= bits;} else {winParams.flags &= ~bits;}win.setAttributes(winParams);}}

二.修改状态栏里字体颜色,白色或者黑色

/*** 状态栏亮色模式,设置状态栏黑色文字、图标,* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android* @return 1:MIUUI 2:Flyme 3:android6.0*/public static int setStatusBarLightMode(Activity activity,boolean isFontDark) {int result = 0;try{if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {if (MIUISetStatusBarLightMode(activity, isFontDark)) {result = MIUI;} else if (FLYMESetStatusBarLightMode(activity.getWindow(), isFontDark)) {result = FLYME;} 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 = ANDROID_M;}else{setTranslucentStatus(activity,true);}}}catch(Exception e){MLog.logi("setStatusBarLightMode IS ERROR!!!");}return result;}/*** 已知系统类型时,设置状态栏黑色文字、图标。* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android* @param type 1:MIUUI 2:Flyme 3:android6.0*/public static void setStatusBarLightMode(Activity activity, int type) {if (type == MIUI) {MIUISetStatusBarLightMode(activity, true);} else if (type == FLYME) {FLYMESetStatusBarLightMode(activity.getWindow(), true);} else if (type == ANDROID_M) {activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}/*** 设置状态栏图标为深色和魅族特定的文字风格* 可以用来判断是否为Flyme用户* @param window 需要设置的窗口* @param dark 是否把状态栏文字及图标颜色设置为深色* @return boolean 成功执行返回true*/private 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 dark 是否把状态栏文字及图标颜色设置为深色* @return boolean 成功执行返回true*/private 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) {e.printStackTrace();}}return result;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。