Androidステータスバーアイコンの色


131

それはステータスバーの変更することは可能ですかと思いまして、アイコンの色(ないステータスバーの色、colorPrimaryDarkここに画像の説明を入力してください 私は、このステータスバーをしたいレッツ発言を:
<item name="colorPrimaryDark">@android:color/white</item>

黒のアイコンは可能ですか?

ありがとう。

編集:

M開発者プレビューの新機能:windowLightStatusBar。これをテーマで反転すると、システムは暗い前景を使用するように指示され、明るい色のステータスバーに役立ちます。Mプレビューには、システムステータスアイコンが半透明の黒に正しく変化する一方で、通知アイコンが白のままであるというバグがあるようです。

from:Roman Nurik Google+の投稿 ここに画像の説明を入力してください

回答:


24

Lollipop以降ではありません。Android 5.0以降、ガイドラインは次のように述べています。

通知アイコンは完全に白でなければなりません。

そうでない場合でも、システムはアイコンのアルファチャネルのみを考慮し、それらを白くレンダリングします。

回避策

Lollipopで色付きのアイコンを表示する唯一の方法は、targetSdkVersion値を下げる<21ことですが、ガイドラインに従って、白いアイコンのみを使用する方がよいと思います。

ただし、色付きのアイコンが必要な場合は、新しいv4サポートライブラリのDrawableCompat.setTintメソッドを使用できます。


3
私はいくつかのグーグル検索を行ったがこれに適切な方法を見つけることができなかったが、Androidガイドラインがアイコンが白でなければならないことを示している場合、それは白である:)ありがとう!
GuilhE

11
これにはより良い回避策があるはずです。いくつかの商用アプリは色を使用しています。これはグーグルによる恐ろしい馬鹿げたデザインの動きだ。もしあったとしても、彼らはもう一度何を考えていましたか?
not2qubit 2015年

Googleのニュースアプリを見れば、彼らは白いステータスバーのアイコンを持っていない:play.google.com/store/apps/...
アダム・フルビッツ

6
<item name="android:windowLightStatusBar">true</item>私のために働いた。
Adam Hurwitz

Gmailアプリ(2019年4月にリリースされたもの)がステータスバーを白に、アイコン/テキストを濃い灰色に着色するのはなぜですか。
ダニエルF

201

はい、それをグレー(カスタムカラーなし)に変更することは可能ですが、これはAPI 23以降でのみ機能し、values-v23 / styles.xmlに追加するだけです。

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

ここに画像の説明を入力してください


2
しかし、メニュー項目のアイコンの色は白のままですが、メニュー項目のアイコンの色を黒に変更するにはどうすればよいですか?
Mateen Chaudhry、

107

@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);
    }
}

素敵な解決策!SDKのバージョンを変更する必要がなかったので、アプリケーションに本当に適していました。
Vitor Braga 2016

2
より正確です:decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok、2017

これは私の日を救った!@ywwynmありがとうございます!
ReGaSLZR 2017

これは最良のソリューションであり、MI電話でも機能します。あなたは救世主です!
Numanqmr 2018年

ShouldChangeStatusBarTintDarkとは何ですか?
イブラマジン

48

APIレベルが23未満の場合は、この方法で使用する必要があります。私はこれをv21 / styleで宣言しました。

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

1
あなたは23を意味します。:(
meditat

いいえ、それについて知らない場合は、このリンクにアクセスしてください。stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

v21修飾子付きのstyles.xmlに配置されている場合でも、これはAPI 23以上を実行しているデバイスでのみ機能します。実際、AS Lintはこれらのアイテムを強調表示し、それをサポートしていないAndroidバージョンでは無視されることを警告します。このtools:targetApi="23"部分は、この警告を抑制するようにLintに指示します。
田代スバル

5

Mi電話、一部のMeizu電話、Blackview電話、WileyFoxなどで動作しないように設定windowLightStatusBarします。MiおよびMeizuデバイスでこのようなハッキングtrue見つけました。これは、このパフォーマンスの問題の包括的な解決策ではありませんが、多分誰かに役立つでしょう。

また、ステータスバー(たとえば)を白に着色することは良い考えではないことをお客様に伝えた方がいいと思います。異なるハックを使用する代わりcolorPrimaryDarkに、ガイドラインに従って適切に定義する方が良いでしょう


-3

はい、変更できます。ただし、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);

本気ですか?ドキュメントには、「設定すると、setColor(int)で設定された色がこの通知の背景色として使用されます」と記載されています。「ほとんどのスタイルでは、通知がフォアグラウンドサービス通知用である場合にのみ、色が適用されます。」アイコンの前景色を変更できないようです。
ドミニク

これはフォアグラウンド通知専用であり、通知アイコンではなく通知アイテムにのみ適用されます。
田代スバル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.