如何使状态栏变为带有黑色图标的白色?


83

我想更改应用程序状态栏的颜色,以使其为带有黑色图标的白色(而不是默认的带有白色图标的黑色)。有什么办法吗?


更改您的默认主题
Rohit5k2 2014年

我应该将其更改为什么主题,以将通知栏图标更改为黑色?
2014年

使用自定义主题。首先看stackoverflow.com/questions/8024706/...
Rohit5k2

那么遵循android准则并带有白色通知图标的应用程序呢?当它们出现在您的应用程序中时,您如何期望用户看到它们?
tyczj 2014年

2
但您无法更改其他应用程序资源的颜色,实际上,棒棒糖无论如何都会使所有图标变白
tyczj 2014年

Answers:


125

使用Android M(API级别23),您可以通过带有android:windowLightStatusBar属性的主题来实现这一点。

编辑:

就像Pdroid提到的那样,这也可以通过编程实现:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 

2
我可以通过编程设置它吗?
busylee

@busylee我想您可以为您的主题创建一个子级,然后在其中进行更改并应用activity.getTheme.setTo(Theme another)
bugraoral

嗨,@ wrecker,我的应用程序通知图标有相同的问题。我在主题中添加了android:windowLightStatusBar = true,并且正在Android M中对其进行测试。但是当我使用第三方启动器应用程序(Nova Launcher)更改主题时,白色通知图标不会变为灰色。我已经尝试了所有可能的方式,但是还无法修复。如果能帮助我,将不胜感激。
苏吉特

1
@busylee是的,您可以随时使用以下方法进行设置:View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 它应该被添加到答案
Pdroid

6
如果要在22或更早版本中使用该怎么办?
Dhara Patel

45

可以将带有灰色图标的白色状态栏设为白色,例如,对于SDK> = 23(请参见docs):

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

在您的styles.xml中,将其设置colorPrimary为白色或以编程方式设置为

getWindow().setStatusBarColor(Color.WHITE);

2
它是在23 API添加,没有21 -见文档
瓦迪姆·科托夫

嘿@VadimKotov实际上是我写的,SDK >= 23但由于某些原因@being_sohelkhan编辑了我的原始答案... stackoverflow.com/posts/46897243/revisions
Rammgarot19年

15

刚刚添加到我在Kotlin上的活动中:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                window.statusBarColor = Color.WHITE
            }

7

只需将此添加到您的样式

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

android:windowDrawsSystemBarBackgrounds设置为true *。这是一个标志,其描述如下:

指示此Window是否负责绘制系统栏背景的标志。如果为true且窗口未漂浮,则系统栏将以透明背景绘制,并且该窗口中的相应区域将填充{@link android.R.attr#statusBarColor}和{@link android.R中指定的颜色.attr#navigationBarColor}。对应于{@link android.view.WindowManager.LayoutParams#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}。


1

您可以在Kotlin中以这种方式使用它

 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

请确保调用它onCreate()之前setContentView()


0

除非您可以控制整个rom手动进行自定义,否则就没有这种方法。我建议您做的是,像谷歌驱动器一样,通过主题使用浅灰色作为状态栏颜色。

编辑:请参阅@Wrekcker答案,因为这在android M中已更改。


1
Android M
Amir Dora

-1

我遇到过同样的问题。

我注意到,当我使用像RelativeLayout这样的常规布局时,它不起作用。但是,当我从诸如CordinatorLayout之类的支持库切换到该库时,它终于开始工作了。试试这个。

  <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".Activities.Activity">


        <android.support.v7.widget.Toolbar
            android:id="@+id/tb_activity"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />


    </android.support.design.widget.CoordinatorLayout>

<*********在其他属性下***********>

样式

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

并在清单中

<activity
            android:name=".Activities.MyActivity"
            android:label="Activity"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.