Android 安卓状态栏工具类(沉浸式、字体颜色等)

systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

window.getDecorView().setSystemUiVisibility(systemUiVisibility);

} else if (Build.VERSION.SDK_INT >= 19) {

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);

} else if (Build.VERSION.SDK_INT >= MIN_API && Build.VERSION.SDK_INT > 16) {

int systemUiVisibility = window.getDecorView().getSystemUiVisibility();

systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

window.getDecorView().setSystemUiVisibility(systemUiVisibility);

}

}

//

//

public static void darkMode(Activity activity, boolean dark) {

if (isFlyme4Later()) {

darkModeForFlyme4(activity.getWindow(), dark);

} else if (isMIUI6Later()) {

darkModeForMIUI6(activity.getWindow(), dark);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

darkModeForM(activity.getWindow(), dark);

}

}

/**

  • 设置状态栏darkMode,字体颜色及icon变黑(目前支持MIUI6以上,Flyme4以上,Android M以上)

*/

public static void darkMode(Activity activity) {

darkMode(activity.getWindow(), DEFAULT_COLOR, DEFAULT_ALPHA);

}

public static void darkMode(Activity activity, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {

darkMode(activity.getWindow(), color, alpha);

}

/**

  • 设置状态栏darkMode,字体颜色及icon变黑(目前支持MIUI6以上,Flyme4以上,Android M以上)

*/

public static void darkMode(Window window, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {

if (isFlyme4Later()) {

darkModeForFlyme4(window, true);

immersive(window, color, alpha);

} else if (isMIUI6Later()) {

darkModeForMIUI6(window, true);

immersive(window, color, alpha);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

darkModeForM(window, true);

immersive(window, color, alpha);

} else if (Build.VERSION.SDK_INT >= 19) {

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);

} else {

immersive(window, color, alpha);

}

if (Build.VERSION.SDK_INT >= 21) {

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(Color.TRANSPARENT);

} else {

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

}

setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);

}

//------------------------->

/**

  • android 6.0设置字体颜色

*/

@RequiresApi(Build.VERSION_CODES.M)

private static void darkModeForM(Window window, boolean dark) {

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(Color.TRANSPARENT);

int systemUiVisibility = window.getDecorView().getSystemUiVisibility();

if (dark) {

systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;

} else {

systemUiVisibility &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;

}

window.getDecorView().setSystemUiVisibility(systemUiVisibility);

}

/**

  • 设置Flyme4+的darkMode,darkMode时候字体颜色及icon变黑

  • http://open-wiki.flyme.cn/index.php?title=Flyme%E7%B3%BB%E7%BB%9FAPI

*/

public static boolean darkModeForFlyme4(Window window, boolean dark) {

boolean result = false;

if (window != null) {

try {

WindowManager.LayoutParams e = 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(e);

if (dark) {

value |= bit;

} else {

value &= ~bit;

}

meizuFlags.setInt(e, value);

window.setAttributes(e);

result = true;

} catch (Exception var8) {

Log.e(“StatusBar”, “darkIcon: failed”);

}

}

return result;

}

/**

  • 设置MIUI6+的状态栏是否为darkMode,darkMode时候字体颜色及icon变黑

  • http://dev.xiaomi.com/doc/p=4769/

*/

@SuppressLint(“PrivateApi”)

public static boolean darkModeForMIUI6(Window window, boolean darkmode) {

Class<? extends Window> 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);

extraFlagField.invoke(window, darkmode ? darkModeFlag : 0, darkModeFlag);

} catch (Exception e) {

e.printStackTrace();

}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

darkModeForM(window, darkmode);

}

return true;

}

/**

  • 判断是否Flyme4以上

*/

public static boolean isFlyme4Later() {

return Build.FINGERPRINT.contains(“Flyme_OS_4”)

|| Build.VERSION.INCREMENTAL.contains(“Flyme_OS_4”)

|| Pattern.compile(“Flyme OS [4|5]”, Pattern.CASE_INSENSITIVE).matcher(Build.DISPLAY).find();

}

/**

  • 判断是否为MIUI6以上

*/

@SuppressLint(“PrivateApi”)

public static boolean isMIUI6Later() {

try {

Class<?> clz = Class.forName(“android.os.SystemProperties”);

Method mtd = clz.getMethod(“get”, String.class);

String val = (String) mtd.invoke(null, “ro.miui.ui.version.name”);

assert val != null;

val = val.replaceAll(“[vV]”, “”);

int version = Integer.parseInt(val);

return version >= 6;

} catch (Exception e) {

return false;

}

}

//

/**

  • 增加View的paddingTop,增加的值为状态栏高度

*/

public static void setPadding(Context context, View view) {

if (Build.VERSION.SDK_INT >= MIN_API) {

view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),

view.getPaddingRight(), view.getPaddingBottom());

}

}

/**

  • 增加View的paddingTop,增加的值为状态栏高度 (智能判断,并设置高度)

*/

public static void setPaddingSmart(Context context, View view) {

if (Build.VERSION.SDK_INT >= MIN_API) {

ViewGroup.LayoutParams lp = view.getLayoutParams();

if (lp != null && lp.height > 0) {

lp.height += getStatusBarHeight(context);//增高

}

view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),

view.getPaddingRight(), view.getPaddingBottom());

}

}

/**

  • 增加View的高度以及paddingTop,增加的值为状态栏高度.一般是在沉浸式全屏给ToolBar用的

*/

public static void setHeightAndPadding(Context context, View view) {

if (Build.VERSION.SDK_INT >= MIN_API) {

ViewGroup.LayoutParams lp = view.getLayoutParams();

lp.height += getStatusBarHeight(context);//增高

view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),

view.getPaddingRight(), view.getPaddingBottom());

}

}

/**

  • 增加View上边距(MarginTop)一般是给高度为 WARP_CONTENT 的小控件用的

*/

public static void setMargin(Context context, View view) {

if (Build.VERSION.SDK_INT >= MIN_API) {

ViewGroup.LayoutParams lp = view.getLayoutParams();

if (lp instanceof ViewGroup.MarginLayoutParams) {

((ViewGroup.MarginLayoutParams) lp).topMargin += getStatusBarHeight(context);//增高

}

view.setLayoutParams(lp);

}

}

/**

  • 创建假的透明栏

*/

@SuppressLint(“ObsoleteSdkInt”)

public static void setTranslucentView(ViewGroup container, int color, @FloatRange(from = 0.0, to = 1.0) float alpha) {

if (Build.VERSION.SDK_INT >= 19) {

int mixtureColor = mixtureColor(color, alpha);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
时减轻大家的负担。**

[外链图片转存中…(img-tHuFoVX6-1715345324777)]

[外链图片转存中…(img-rS47OzTZ-1715345324778)]

[外链图片转存中…(img-2ab9J6V4-1715345324779)]

[外链图片转存中…(img-qo48UQrp-1715345324780)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值