web-dev-qa-db-ja.com

Androidステータスバーの背景色を変更する方法

アプリケーションを書いてステータスバーの背景色を変えたいのですが。私のAndroidデバイスの色が黒です。別の色に変更したいと思います。ここに関連するいくつかの投稿を見ましたが、通知の背景について教えています。

誰かがこれについて知っているなら、私を助けてください。

デフォルトのステータスバー

enter image description here

ステータスバーの背景としてドローアブルを使用した後

enter image description here

20
Yugandhar Babu

申し訳ありませんが、カスタムのROM=を作成している場合を除き、これは、アプリのステータスバーのみを変更したい場合を除き、不可能です。

これには多くの作業が必要になります。

最初に、Theme.NoTitleBar.Fullscreenをマニフェストに追加する必要があります

<application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name" 
        Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
        >

次に、ステータスバーを表す標準レイアウトを作成する必要があるとしたら、これは時間を追加する必要があり、他のアプリからすべての通知も受信する必要があることを意味します。方法は個人的にはわかりませんが、道があると確信しています。

あなたが本当にこの幸運を望んでいるなら、あなたはあなたの前に苦労しています。


申し訳ありませんが、カスタムROMSの作成方法に関する知識がなければ、これは可能ではないと思います

13
FabianCook

これは、KitKat以降で可能です。

(あなたが尋ねたように)アプリケーションで使用したい場合は、このライブラリを使用できます https://github.com/jgilfelt/SystemBarTint

あなただけ書く必要があります:

// set a custom tint color for all system bars
tintManager.setTintColor(Color.parseColor("#99000FF"));   
// set a custom navigation bar resource
tintManager.setNavigationBarTintResource(R.drawable.my_tint);
// set a custom status bar drawable
tintManager.setStatusBarTintDrawable(MyDrawable);
12
Ravit D

Styles.xmlで次のようにします。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
         <!---Below is the code for status bar color------>
        <item name="Android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

これをvalues-v21/styles.xmlに配置して、Lollipop以降でこれを有効にします。

プログラムでそれを行うには、これを行うことができます:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));
9
Gaurav Singh

[〜#〜] if [〜#〜] ADTとSDKとそれに関連するすべてのものをアップグレードせずにLollipopのステータスバーの色を更新したい場合、リフレクションを使用してAPIのメソッドに到達できます21(ロリポップ)以上

あなたの活動で:

    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();

        // original code, works on Lollipop SDKs
        // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        // window.setStatusBarColor(getResources().getColor(YOUR_COLOR));

        try {
            // to work on old SDKs 
            int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;
            window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            Class<?> cls = window.getClass();
            Method method = cls.getDeclaredMethod("setStatusBarColor",
                    new Class<?>[] { Integer.TYPE });

            method.invoke(window, Res.color(theme.statusColor));

        } catch (Exception e) {
            // upgrade your SDK and ADT :D
        }

    }

私の現在の最小APIは15です。

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS

あなたのSDKで、あなたは私が何をしたのかとしてそれからドキュメントからそれの価値を得ることができます

WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

これが役に立てば幸い

1