Android状态栏图标颜色

时间:2015-05-06 11:48:45

标签: android android-5.0-lollipop android-styles android-statusbar

我想知道是否可以更改状态栏图标颜色(状态栏颜色,colorPrimaryDarkenter image description here 假设我想要这个状态栏: <item name="colorPrimaryDark">@android:color/white</item>

和黑色的图标,是否可能?

感谢。

修改

  

M开发者预览中的新功能:windowLightStatusBar。翻开这个   在你的主题中告诉系统使用一个黑暗的前景,非常有用   浅色状态栏。注意M预览似乎有一个bug   通知图标保持白色,而系统状态图标   正确地改为半透明黑色。

来自: Roman Nurik Google+ post enter image description here

8 个答案:

答案 0 :(得分:145)

是的,可以将其更改为灰色(没有自定义颜色),但这仅适用于API 23及更高版本,您只需将其添加到您的值-v23 / styles.xml中

<item name="android:windowLightStatusBar">true</item>

enter image description here

答案 1 :(得分:66)

@eOnOe已经回答了我们如何通过xml更改状态栏色调。但我们也可以在代码中动态更改它:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    View decor = getWindow().getDecorView();
    if (shouldChangeStatusBarTintToDark) {
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    } else {
        // We want to change tint color to white again.
        // You can also record the flags in advance so that you can turn UI back completely if
        // you have set other flags before, such as translucent or full screen.
        decor.setSystemUiVisibility(0);
    }
}

答案 2 :(得分:34)

如果您的API级别小于23,则必须以这种方式使用它。 它适用于我在 v21 / style 下宣布这个。

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

答案 3 :(得分:23)

不是自棒棒糖以来。从Android 5.0开始,指南说:

  

通知图标必须完全为白色。

即使它们不是,系统也只会考虑图标的alpha通道,将它们呈现为白色

解决方法

在Lollipop上设置彩色图标的唯一方法是将targetSdkVersion降低到值<21,但我认为您最好遵循指南并仅使用白色图标。

如果您仍然决定要使用彩色图标,则可以使用新v4支持库中的DrawableCompat.setTint方法。

答案 4 :(得分:4)

windowLightStatusBar设置为true不适用于Mi手机,部分魅族手机,Blackview手机,WileyFox等。 我为Mi和Meizu设备找到了such hack。这不是这个性能问题的综合解决方案,但可能对某人有用。

我认为,最好告诉客户着色状态栏(例如)白色 - 不是一个好主意。而不是使用不同的黑客,最好根据指南

定义适当的colorPrimaryDark

答案 5 :(得分:3)

SystemUiVisibility 标记已弃用。改用 WindowInsetsController

下面的代码将图标的颜色设置为黑色(用于状态栏)

//icon color -> black  
activity.getWindow().getDecorView().getWindowInsetsController().setSystemBarsAppearance(APPEARANCE_LIGHT_STATUS_BARS, APPEARANCE_LIGHT_STATUS_BARS);

并且下面的代码将其清除(即将图标颜色变为黑色状态栏的白色):

//icon color -> white
activity.getWindow().getDecorView().getWindowInsetsController().setSystemBarsAppearance(0, APPEARANCE_LIGHT_STATUS_BARS);

文档链接: https://developer.android.com/reference/android/view/WindowInsetsController#setSystemBarsAppearance(int,%20int)

答案 6 :(得分:0)

是的,您可以更改它。但在api 22及更高版本中,使用NotificationCompat.Builder和setColorized(true):

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, context.getPackageName())
                .setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(icon, level)
                .setLargeIcon(largeIcon)
                .setContentIntent(intent)
                .setColorized(true)
                .setDefaults(0)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

答案 7 :(得分:0)

这适用于所有想要更改其应用程序的通知小图标颜色的人,可以使用 setColor

的此 NotificationCompat.Builder 方法

示例:

val builder = NotificationCompat.Builder(this, "whatever_channel_id")
        **.setSmallIcon(R.drawable.ic_notification) //set icon for notification**
        .setColor(ContextCompat.getColor(this, R.color.pink))
        .setContentTitle("Notification Title")
        .setContentText("Notification Message!")