android 当状态栏背景色为白色时候 字体颜色的适应

本文提供了解决Android应用中当主题背景色为白色时,状态栏字体颜色也变为白色导致不可见的问题的方法。具体针对MIUI和Flyme系统提供了代码实现,通过设置状态栏属性来改变字体颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当app做沉浸的时候 如果app的主题背景色为白色的时候, 状态栏字体颜色也为白色。这样就看不清了

在网上找到解决办法但只支持 miui 和 flyme 

直接上代码

/**
	 * 
	 * MIUI 状态栏字体颜色
	 * 
	 * @param activity
	 * @param darkmode
	 * @return
	 */
	public static boolean setMiuiStatusBarDarkMode(Activity activity,
			boolean darkmode) {
		Class<? extends Window> clazz = activity.getWindow().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(activity.getWindow(), darkmode ? darkModeFlag
					: 0, darkModeFlag);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	/**
	 * 
	 * flyme状态栏字体颜色
	 * 
	 * @param activity
	 * @param dark
	 * @return
	 */
	public static boolean setMeizuStatusBarDarkIcon(Activity activity,
			boolean dark) {
		boolean result = false;
		if (activity != null) {
			try {
				WindowManager.LayoutParams lp = activity.getWindow()
						.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);
				activity.getWindow().setAttributes(lp);
				result = true;
			} catch (Exception e) {
			}
		}
		return result;
	}

修改后效果图如下




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值