如何更改 Android 中的状态栏图标颜色?
Posted
技术标签:
【中文标题】如何更改 Android 中的状态栏图标颜色?【英文标题】:How to change status bar icon color in Android? 【发布时间】:2018-02-18 06:58:54 【问题描述】:我想将状态栏图标的颜色从白色更改为黑色。我尝试下面的代码,但我做不到。你能帮帮我吗?
活动代码:
public static void setLightStatusBar(View view,Activity activity)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
int flags = view.getSystemUiVisibility();
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
view.setSystemUiVisibility(flags);
activity.getWindow().setStatusBarColor(Color.WHITE);
style.xml 代码:
<item name="android:windowLightStatusBar">true</item>
【问题讨论】:
你想改变图标颜色。Time
和其他图标在顶部吗?
@KeLiuyue 是的。我想更改状态栏文字和图标颜色。
【参考方案1】:
试试这个。
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);
// edited here
activity.getWindow().setStatusBarColor(Color.WHITE);
然后设置在根布局
android:fitsSystemWindows="true"
另一种方式
在你的代码中试试这个。
public static int StatusBarLightMode(Activity activity)
int result = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
if (MIUISetStatusBarLightMode(activity, 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;
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;
public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark)
boolean result = false;
Window window = activity.getWindow();
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;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
if (dark)
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
else
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
catch (Exception e)
e.printStackTrace();
return result;
然后在您的代码中使用StatusBarLightMode(this);
。
它可以让你的状态文字和图标变成黑色。
编辑
从Android 6.0开始,谷歌官方提供了在style属性中配置android:windowLightStatusBar
的支持
是的,当设置为true时,当状态栏的背景颜色为浅色时,状态栏的文字颜色变为灰色为false。
<style name="statusBarStyle" parent="@android:style/Theme.DeviceDefault.Light">
<item name="android:statusBarColor">@color/status_bar_color</item>
<item name="android:windowLightStatusBar">false</item>
</style>
【讨论】:
不幸的是它不起作用。我的手机是一加一。安卓版本为6.0.1 你可以再试一次。 @MuhammedCobanoglu 你能在你的代码中尝试第二种方式吗?我用的是华为,没问题。你也可以试试@MuhammedCobanoglu 我尝试过使用三星 A3 2017。它有效。谢谢你的一切。 @MuhammedCobanoglu ,祝你好运!【参考方案2】:这适用于 Android 版本 >= 21:
activity.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
activity.getWindow().setStatusBarColor(0x000000);
【讨论】:
这真的有效!!我不知道为什么?我的问题是我需要写入状态栏并且仅设置SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
使屏幕布局在 API 23 上消失(仅!)以上是关于如何更改 Android 中的状态栏图标颜色?的主要内容,如果未能解决你的问题,请参考以下文章
如何自定义状态栏图标和文字颜色?例如。状态栏背景:白色,状态栏图标颜色,文字:红色