web-dev-qa-db-ja.com

AppCompat ActionBarActivityを使用してステータスバーの色を変更する

私の1つのアクティビティではPaletteを使用してツールバーの色を変更していますが、ActionBarActivityを使用している5.0デバイスではstatus bar色がアクティビティテーマのcolorPrimaryDarkの色です。

私は、5.0ではWindow.setStatusBarColor()を使えるようになりましたが、ActionBarActivityにはこれがありません。

だから私の質問は5.0にあります。どうやったらActionBarActivityでステータスバーの色を変えることができますか?

134
tyczj

私はその問題を理解しているかどうかわからない。

私はあなたがプログラム的にステータスバーの色を変更したい(そしてデバイスがアンドロイド5.0を持っているならば)それからあなたはあなたはを使うことができます Window.setStatusBarColor() アクティビティがActivityActionBarActivityのどちらから派生したものであっても、違いはありません。

やってみてください:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.BLUE);
}

これをActionBarActivityでテストしたところ、問題なく動作しました。


注:FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDSスタイルファイルに既に設定されている場合は、values-v21フラグをプログラムで設定する必要はありません。

    <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
375
matiash

ステータスバーの色を変更するにはさまざまな方法があります。

1)styles.xmlを使用する。 Android:statusBarColor属性を使用して、これを簡単で静的な方法で行うことができます。

注意:この属性はMaterialテーマと一緒に使用することもできます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="Android:statusBarColor">@Android:color/transparent</item>
    </style>
</resources>

2)WindowクラスのsetStatusBarColor(int)メソッドを使って動的に実行できます。ただし、このメソッドはAPI 21以降でのみ使用可能です。それでそれをチェックすることを忘れないでください、さもなければあなたのアプリは確かにより低い装置でクラッシュするでしょう。

これがこのメソッドの実用的な例です。

if (Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}

primaryDarkは私が私のアプリで使用している原色の700色合いです。この色はcolors.xmlファイルで定義できます。

試してみて、質問があれば教えてください。それが役に立てば幸い。

52
Aritra Roy

ステータスバーの色はまだAppCompatに実装されていないと思います。これらは利用可能な属性です:

    <!-- ============= -->
    <!-- Color palette -->
    <!-- ============= -->

    <!-- The primary branding color for the app. By default, this is the color applied to the
         action bar background. -->
    <attr name="colorPrimary" format="color" />

    <!-- Dark variant of the primary branding color. By default, this is the color applied to
         the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
    <attr name="colorPrimaryDark" format="color" />

    <!-- Bright complement to the primary branding color. By default, this is the color applied
         to framework controls (via colorControlActivated). -->
    <attr name="colorAccent" format="color" />

    <!-- The color applied to framework controls in their normal state. -->
    <attr name="colorControlNormal" format="color" />

    <!-- The color applied to framework controls in their activated (ex. checked) state. -->
    <attr name="colorControlActivated" format="color" />

    <!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
    <attr name="colorControlHighlight" format="color" />

    <!-- The color applied to framework buttons in their normal state. -->
    <attr name="colorButtonNormal" format="color" />

    <!-- The color applied to framework switch thumbs in their normal state. -->
    <attr name="colorSwitchThumbNormal" format="color" />

\ sdk\extras\Android\support\v7\appcompat\res\values\attrs.xmlから)

9
JstnPwll

これを試してみてください、私はこれを使いました、そしてそれはv21でとてもうまくいきます。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimaryDark">@color/blue</item>
</style>
3
Manoj Kumar

Xamarin.Android MVVMCrossアプリケーションのための特定のR&Dの後、それらの助けを借りて、上記の回答をありがとう

メソッドOnCreateのアクティビティに指定されたフラグ

protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
    }

各MvxActivityについて、テーマは以下のように言及されています

 [Activity(
    LaunchMode = LaunchMode.SingleTop,
    ScreenOrientation = ScreenOrientation.Portrait,
    Theme = "@style/Theme.Splash",
    Name = "MyView"
    )]

私のSplashStyle.xmlは以下のようになります

<?xml version="1.0" encoding="utf-8"?>
<resources> 
    <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
          <item name="Android:statusBarColor">@color/app_red</item>
          <item name="Android:colorPrimaryDark">@color/app_red</item>
    </style>
 </resources>

そして、私はV7 appcompactを紹介しました。

1
Pallavi

申請中

    <item name="Android:statusBarColor">@color/color_primary_dark</item>
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>

Theme.AppCompat.Light.DarkActionBarで私のために働いていませんでした。これは、styles.xmlでAndroid:colorPrimaryと一緒にcolorPrimaryDarkを通常どおりに指定することによって行います。

<item name="Android:colorAccent">@color/color_primary</item>
<item name="Android:colorPrimary">@color/color_primary</item>
<item name="Android:colorPrimaryDark">@color/color_primary_dark</item>

そして設定で

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    Window window = this.Window;
                    Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
                }

ステータスバーの色をコードに設定する必要はありませんでした。

0
Annu