ステータスバーiconscolor(notを変更できるかどうか疑問に思っていましたステータスバーの色、colorPrimaryDark
) このステータスバーが欲しいとしましょう:<item name="colorPrimaryDark">@Android:color/white</item>
黒のアイコンは可能ですか?
ありがとう。
編集:
M開発者プレビューの新機能:windowLightStatusBar。これをテーマでオンにすると、システムは暗い前景を使用するようになり、明るい色のステータスバーに役立ちます。 Mプレビューには、通知アイコンが白のままで、システムステータスアイコンが正しく半透明の黒に変わるバグがあるようです。
from:Roman NurikGoogle+ post
ロリポップ以来。 Android 5.0以降、ガイドラインには次のように記載されています。
通知アイコンは完全に白でなければなりません。
そうでなくても、システムはアイコンのアルファチャネルのみを考慮し、それらを白にレンダリングします
Lollipopに色付きのアイコンを表示する唯一の方法は、targetSdkVersion
を値<21
に下げることですが、ガイドラインに従って白いアイコンのみを使用する方が良いと思います。
それでも色付きアイコンが必要な場合は、新しいv4サポートライブラリの DrawableCompat.setTint メソッドを使用できます。
@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);
}
}
23よりも小さいAPIレベルがある場合は、この方法で使用する必要があります。 v21/styleでこれを宣言してくれました。
<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
<item name="Android:windowLightStatusBar" tools:targetApi="23">true</item>
windowLightStatusBar
をtrue
に設定すると、Mi電話、一部のMeizu電話、Blackview電話、WileyFoxなどでは機能しません。MiおよびMeizuデバイスでは そのようなハック が見つかりました。これは、このパフォーマンスの問題を包括的に解決するものではありませんが、誰かにとって役立つかもしれません。
そして、ステータスバー(たとえば)を白に着色することは良い考えではないことをお客様に伝える方が良いと思います。異なるハックを使用する代わりに、ガイドラインに従って適切なcolorPrimaryDark
を定義することをお勧めします
はい、変更できます。ただし、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);