1. Android原生设置沉浸式状态栏,设置状态栏颜色,字体颜色

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;import androidx.annotation.ColorInt;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.regex.Pattern;public class StatusBarUtil {private static final int DEFAULT_ALPHA = 0;/*** 设置状态栏颜色(自定义颜色)** @param activity 目标activity* @param color    状态栏颜色值*/public static void setColor(@NonNull Activity activity, @ColorInt int color) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);setColor(activityWeakReference.get(), color, DEFAULT_ALPHA);}/*** 设置纯色状态栏(自定义颜色,alpha)** @param activity 目标activity* @param color    状态栏颜色值* @param alpha    状态栏透明度*/public static void setColor(@NonNull Activity activity, @ColorInt int color, @IntRange(from = 0, to = 255) int alpha) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);Window window = activityWeakReference.get().getWindow();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(cipherColor(color, alpha));} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);setTranslucentView((ViewGroup) window.getDecorView(), color, alpha);setRootView(activityWeakReference.get(), true);}}/*** 设置状态栏渐变颜色** @param activity 目标activity* @param view     目标View*/public static void setGradientColor(@NonNull Activity activity, View view) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);ViewGroup decorView = (ViewGroup) activityWeakReference.get().getWindow().getDecorView();View fakeStatusBarView = decorView.findViewById(android.R.id.custom);if (fakeStatusBarView != null) {decorView.removeView(fakeStatusBarView);}setRootView(activityWeakReference.get(), false);setTransparentForWindow(activityWeakReference.get());setPaddingTop(activityWeakReference.get(), view);}/*** 设置透明状态栏** @param activity 目标界面*/public static void setTransparentForWindow(@NonNull Activity activity) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);Window window = activityWeakReference.get().getWindow();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}}/*** 增加View的paddingTop,增加的值为状态栏高度 (智能判断,并设置高度)** @param context 目标Context* @param view    需要增高的View*/public static void setPaddingTop(Context context, @NonNull View view) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {ViewGroup.LayoutParams lp = view.getLayoutParams();if (lp != null && lp.height > 0 && view.getPaddingTop() == 0) {lp.height += getStatusBarHeight(context);view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + getStatusBarHeight(context),view.getPaddingRight(), view.getPaddingBottom());}}}/*** 设置状态栏darkMode,字体颜色及icon变黑(目前支持MIUI6以上,Flyme4以上,Android M以上)** @param activity 目标activity*/public static void setDarkMode(@NonNull Activity activity) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);darkMode(activityWeakReference.get().getWindow(), true);}/*** 设置状态栏darkMode,字体颜色及icon变亮(目前支持MIUI6以上,Flyme4以上,Android M以上)** @param activity 目标activity*/public static void setLightMode(@NonNull Activity activity) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);darkMode(activityWeakReference.get().getWindow(), false);}@TargetApi(Build.VERSION_CODES.M)private static void darkMode(Window window, boolean dark) {if (isFlyme4()) {setModeForFlyme4(window, dark);} else if (isMIUI6()) {setModeForMIUI6(window, dark);}darkModeForM(window, dark);}/*** android 6.0设置字体颜色** @param window 目标window* @param dark   亮色 or 暗色*/@RequiresApi(Build.VERSION_CODES.M)private static void darkModeForM(Window window, boolean dark) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {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);}}/*** 设置MIUI6+的状态栏的darkMode,darkMode时候字体颜色及icon* http://dev.xiaomi.com/doc/p=4769/** @param window 目标window* @param dark   亮色 or 暗色*/private static void setModeForMIUI6(Window window, boolean dark) {Class<? extends Window> clazz = window.getClass();try {Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");int darkModeFlag = field.getInt(layoutParams);Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);extraFlagField.invoke(window, dark ? darkModeFlag : 0, darkModeFlag);} catch (Exception e) {Log.e("StatusBar", "darkIcon: failed");}}/*** 设置Flyme4+的状态栏的darkMode,darkMode时候字体颜色及icon* http://open-wiki.flyme.cn/index.php?title=Flyme%E7%B3%BB%E7%BB%9FAPI** @param window 目标window* @param dark   亮色 or 暗色*/private static void setModeForFlyme4(Window window, boolean dark) {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);} catch (Exception e) {Log.e("StatusBar", "darkIcon: failed");}}/*** 判断是否Flyme4以上*/private static boolean isFlyme4() {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以上*/private static boolean isMIUI6() {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");val = val.replaceAll("[vV]", "");int version = Integer.parseInt(val);return version >= 6;} catch (Exception e) {return false;}}/*** 计算alpha色值** @param color 状态栏颜色值* @param alpha 状态栏透明度*/private static int cipherColor(@ColorInt int color, int alpha) {if (alpha == 0) {return color;}float a = 1 - alpha / 255f;int red = color >> 16 & 0xff;int green = color >> 8 & 0xff;int blue = color & 0xff;red = (int) (red * a + 0.5);green = (int) (green * a + 0.5);blue = (int) (blue * a + 0.5);return 0xff << 24 | red << 16 | green << 8 | blue;}/*** 创建透明View** @param viewGroup 目标视图* @param color     状态栏颜色值* @param alpha     状态栏透明度*/private static void setTranslucentView(ViewGroup viewGroup, @ColorInt int color, @IntRange(from = 0, to = 255) int alpha) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {int cipherColor = cipherColor(color, alpha);View translucentView = viewGroup.findViewById(android.R.id.custom);if (translucentView == null && cipherColor != 0) {translucentView = new View(viewGroup.getContext());translucentView.setId(android.R.id.custom);ViewGroup.LayoutParams params =new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(viewGroup.getContext()));viewGroup.addView(translucentView, params);}if (translucentView != null) {translucentView.setBackgroundColor(cipherColor);}}}/*** 设置根布局参数** @param activity         目标activity* @param fitSystemWindows 是否预留toolbar的高度*/private static void setRootView(Activity activity, boolean fitSystemWindows) {WeakReference<Activity> activityWeakReference = new WeakReference<>(activity);ViewGroup parent = activityWeakReference.get().findViewById(android.R.id.content);for (int i = 0, count = parent.getChildCount(); i < count; i++) {View childView = parent.getChildAt(i);if (childView instanceof ViewGroup) {childView.setFitsSystemWindows(fitSystemWindows);((ViewGroup) childView).setClipToPadding(fitSystemWindows);}}}/*** 获取状态栏高度** @param context 目标Context*/public static int getStatusBarHeight(Context context) {// 获得状态栏高度int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");return context.getResources().getDimensionPixelSize(resourceId);}
}

flutter Android 设置沉浸式窗台兰,在flutter项目lib下的main方法下加如下代码,在runApp之后加


//设置状态栏沉浸式(修改flutter状态栏黑色半透明为全透明)
if (defaultTargetPlatform == TargetPlatform.android) {SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.blue,//该颜色也可以设置成透明或者半透明statusBarBrightness: Brightness.dark,);SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);}

Android设置状态栏颜色,沉浸式状态栏 fllutter Android设置沉浸式状态栏相关推荐

  1. 易语言超级列表框怎么设置文本颜色_条码打印软件如何设置条码和数字之间的间距...

    在使用条码打印软件制作条形码时,有些客户对条形码的设置有特殊要求,想要条形码和数字更靠近一些,咨询这个该怎么设置,这个在条码打印软件中的设置也是非常简单的,具体步骤如下: 1.在条码打印软件中新建标签 ...

  2. android wheelview 字体颜色,百行代码实现Android WheelView

    先说下实现思路,这里,我打算使用ListView来实现. 第一步:无限滑动,这个比较简单,类似于Banner图的无限滑动原理,在Adapter中处理一下count即可,代码如下 // 为Count设置 ...

  3. python作图设置背景颜色_如何在matplotlib中设置绘图的外部背景颜色

    敬礼 我想更改matplotlib中绘图的外部颜色.我可以找到很多很多例子,如何改变内部背景颜色,但外部背景颜色拒绝改变.在 图像的白色部分就是我所说的"外部"背景.最外面的颜色只 ...

  4. Android开发技巧——设置系统状态栏颜色

    开门见山,先来三张效果图: 然后我们再来讲如何实现以及如何快速地实现. 如何实现 实现设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上.这是因为,在这个版本以下,没有任何的A ...

  5. Android 如何更改状态栏颜色

    然后在我们的Activity的onCreate方法中使用以上代码就可以了. 问题及解决方法 但是在使用之后,我们会发现,我们Activity的布局内容顶到了状态栏上去了,被状态栏及ActionBar所 ...

  6. android 设置activity背景图片,给Activity设置背景颜色

    为了使得错误提示更加显眼,再用Toast+振动效果之外考虑变换整个activity的背景颜色. 尝试一: activity并没像winform一样直接给个属性来设置,就想获取整个activity的la ...

  7. TlBCO Jaspersoft Studio 软件根据条件设置字体颜色

    最近客户提出一个需求,根据结果不一样设置字体颜色,我一听客户提出的要求,真想打死他,没办法只能撸起袖子干,在网上找些资料,很少,研究一点API,最终实现了.记录我的实现过程,希望能帮助大家. 1.找到 ...

  8. echarts地图设置legend_echarts设置图例颜色和地图底色的方法实例

    导读热词 前言 本来想写echarts初始化函数的,但最近因为要写一个地图与柱状图的混合方式,也就是每个省的地图上要有柱状图显示.于是仔细使用了一下地图. 1.地图的一些基本属性就不介绍了,还是那些s ...

  9. qt textbrowser 设置字体颜色

    qtextbrowser支持html语法来设置字体.因此使用html语法来设置字体颜色. 但是使用这个方式来设置字体颜色会有Bug.在设置某一部分字体颜色后,有概率导致后续字体颜色,都变成设置的颜色. ...

最新文章

  1. 向oracle中导入*.csv文件
  2. python使用redis_Python操作redis系列之 列表(list) (五)
  3. glibc-2.23学习笔记(二)—— free部分源码分析
  4. boost::geometry::line_interpolate用法的测试程序
  5. java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置
  6. 解决eclipse刚启动卡死的问题~~~亲测有效~~
  7. JavaScript 获取 当前日期和三十天以前日期
  8. 数据缓存 php,数据缓存 · ThinkPHP3.2.3完全开发手册 · 看云
  9. ansible的介绍
  10. ubuntu14操作系统chrome标签和书签乱码解决
  11. socket编程(五)
  12. Linux命令解释之crontab
  13. PagerSwitch tab样式加上下拉刷新(一)
  14. 定位CoreLocation 使用
  15. 重装XP后无法启动LINUX的解决方案
  16. android p 第三方预装,刘作虎确认 一加6T将出厂预装Android P系统
  17. 数学建模综合评价方法
  18. 负债均衡(三)下载安装Nginx
  19. Java SHA哈希示例
  20. SAP VK13 提示 内部错误:T IVAKE F IVAKE_INSERT I MV130F0I

热门文章

  1. 各种背景音乐,以后公司的颁奖、签约仪式不怕找不到背景配乐了!
  2. smartforms例子
  3. windows11提示“需要使用新应用以打开此ms-actioncenter链接”
  4. 使用felxable.js适配pc端的Vue项目
  5. 指定起终点的最短路算法-Dijkstra标号法及其改进
  6. 【c】大学生在校学习c语言常见代码
  7. 60帧/秒摄像头 视频帧数最佳选择!
  8. 设计行业高效办公秘籍——趁手的设计软件
  9. 摆动凸轮matlab程序,滚子摆动从动件凸轮设计matlab程序
  10. Tomcat启动报错子容器启动失败