Created
June 8, 2016 05:44
-
-
Save Haldir65/c6b65f8ce5d905994e1c127de8a5567c to your computer and use it in GitHub Desktop.
针对小米和魅族手机的状态栏修改实现
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Created by 赵晨璞 | |
*/ | |
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_HIDE_NAVIGATION | |
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE); | |
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); | |
window.setStatusBarColor(Color.TRANSPARENT); | |
window.setNavigationBarColor(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以上版本 | |
* @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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment