web-dev-qa-db-ja.com

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

ステータスバーiconscolor(notを変更できるかどうか疑問に思っていましたステータスバーの色、colorPrimaryDark) enter image description here このステータスバーが欲しいとしましょう:
<item name="colorPrimaryDark">@Android:color/white</item>

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

ありがとう。

編集:

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

from:Roman NurikGoogle+ postenter image description here

95
GuilhE

ロリポップ以来。 Android 5.0以降、ガイドラインには次のように記載されています。

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

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

Workaround

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

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

23
Kuba Spatny

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

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

enter image description here

150
eOnOe

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

23よりも小さいAPIレベルがある場合は、この方法で使用する必要があります。 v21/styleでこれを宣言してくれました。

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

windowLightStatusBartrueに設定すると、Mi電話、一部のMeizu電話、Blackview電話、WileyFoxなどでは機能しません。MiおよびMeizuデバイスでは そのようなハック が見つかりました。これは、このパフォーマンスの問題を包括的に解決するものではありませんが、誰かにとって役立つかもしれません。

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

4
Jackky777

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