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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
  • 面试技巧+面试题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

1aToZ-1713753865512)]

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
    [外链图片转存中…(img-XmJ3ucFa-1713753865513)]
  • 面试技巧+面试题
    [外链图片转存中…(img-yG8wlw6R-1713753865515)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 随着移动设备的普及,越来越多的人开始使用android系统的手机或平板电脑。然而,很多人对于android系统自带的状态栏布局并不满意,这时候我们就需要一款android状态栏沉浸软件来改善这种情况。 简单来讲,android状态栏沉浸软件可以让用户将原本系统自带的状态栏隐藏起来,使屏幕更加纯净简洁。同时,用户可以根据自己的喜好自定义状态栏的背景颜色、透明度、图标等一系列属性。这种软件能够让用户在使用手机或平板电脑时拥有更好的使用体验,同时提高了屏幕的利用率。 值得一提的是,android状态栏沉浸软件在不同的手机品牌和系统版本下可能会存在兼容性问题,所以在选择使用前最好先查询一下相关的使用教程和注意事项。 总之,android状态栏沉浸软件是一款非常实用的软件,可以提升用户的使用体验和工作效率,如果你想要获得更好的屏幕展示效果,那么不妨尝试一下这种软件。 ### 回答2: Android 状态栏沉浸软件是一种让用户可以自定义和优化 Android 系统状态栏显示方工具。在大多数 Android 设备上,状态栏是一个固定的元素,通常显示设备的时间、电量、信号和通知等信息,占据屏幕的顶部。然而,有些用户希望将应用程序占用的可用空间最大化,因此状态栏可能会显得有些碍眼。同时,一些用户喜欢自定义外观,以便与自己设备的主题相匹配。 Android 状态栏沉浸软件通过隐藏或重定义状态栏,增加了屏幕的可用空间。例如,可以让状态栏完全消失,节省了顶部的宝贵空间。或者,也可以选择改变状态栏颜色以配合设备的主题,这样便于与屏幕的其他元素相协调。 除了可用屏幕空间和外观之外,状态栏沉浸软件还可以在阅读、视频观看或游戏等场景中提供更佳的用户体验。正如人们不喜欢在大屏幕电视上看影片时在底部或顶部看到那些控制按钮一样,手机屏幕也将会受到相同的影响。当状态栏隐藏后,用户可以获得更清晰的视觉体验。 总的来说,Android 状态栏沉浸软件为用户提供了更好的自定义体验,同时也更增加了屏幕显示效果。无论是为优化手机的可用空间,还是为了更好的视觉体验,它都是一种非常有用的工具。 ### 回答3: Android状态栏沉浸是一种让应用程序能够使用全屏显示的功能。传统的Android状态栏会出现在屏幕最上方,占用屏幕的一部分,导致应用程序无法使用整个屏幕。当一个应用程序启用状态栏沉浸时,系统的状态栏会被隐藏,使应用程序能够使用整个屏幕。 有很多现有的Android状态栏沉浸软件,让你能够启用这个功能,例如SystemUI Tuner、SetEdit等。这些软件有不同的设置选项,可以供用户选择。 对于程序员来说,他们也可以利用Android的API来实现沉浸。这需要他们在代码中添加一些指令,以告诉Android系统如何隐藏状态栏。不过这对一般用户来说,可能会比较困难。 总的来说,状态栏沉浸软件可以让用户在使用应用程序时,是能够看到更多的内容。这种功能通常更适合用于娱乐和游戏,而非日常使用。切记使用状态栏沉浸,需要注意不要被短信,来电等信息所打扰。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值