webentwicklung-frage-antwort-db.com.de

Ändern Sie die Farbe der Statusleiste mit AppCompat ActionBarActivity

in meiner einen Aktivität ändere ich die Symbolleistenfarbe mit Palette, aber auf 5.0-Geräten mit ActionBarActivity ist die status bar-Farbe die Farbe meiner colorPrimaryDark in meinem Aktivitätsdesign, daher habe ich 2 sehr unterschiedliche Farben und es sieht nicht gut aus.

Ich weiß, dass Sie in 5.0 Window.setStatusBarColor() verwenden können, aber ActionBarActivity hat dies nicht.

meine Frage ist also in 5.0. Wie kann ich die Farbe der Statusleiste mit ActionBarActivity ändern?

126
tyczj

Ich bin mir nicht sicher, ob ich das Problem verstehe.

Wenn Sie die Farbe der Statusleiste programmgesteuert ändern möchten (sofern das Gerät Android 5.0) hat), können Sie verwenden Window.setStatusBarColor() . Es sollte keinen Unterschied machen, ob die Aktivität von Activity oder ActionBarActivity abgeleitet wird.

Probieren Sie einfach Folgendes aus:

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

Habe dies gerade mit ActionBarActivity getestet und es funktioniert in Ordnung.


Hinweis: Einstellen des FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag programmgesteuert ist nicht erforderlich, wenn Ihr values-v21 Styles-Datei hat es bereits festgelegt, über:

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

Es gibt verschiedene Möglichkeiten, die Farbe der Statusleiste zu ändern.

1) Verwenden der styles.xml. Sie können das Attribut Android: statusBarColor verwenden, um dies auf einfache, aber statische Weise zu tun. 

Hinweis: Sie können dieses Attribut auch mit dem Materialdesign verwenden.

<?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) Sie können dies mit der setStatusBarColor (int) -Methode in der Window-Klasse dynamisch erledigen. Beachten Sie jedoch, dass diese Methode nur für API 21 oder höher verfügbar ist. Vergewissern Sie sich also, dass dies der Fall ist, oder Ihre App wird in niedrigeren Geräten sicher abstürzen.

Hier ist ein Arbeitsbeispiel dieser Methode.

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

dabei ist primaryDark die 700-Tönung der Primärfarbe, die ich in meiner App verwende. Sie können diese Farbe in der Datei colors.xml definieren.

Probieren Sie es aus und lassen Sie es mich wissen, wenn Sie Fragen haben. Ich hoffe es hilft.

50
Aritra Roy

Ich glaube nicht, dass die Farbe der Statusleiste in AppCompat implementiert wurde. Folgende Attribute stehen zur Verfügung:

    <!-- ============= -->
    <!-- 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" />

(Von\sdk\extras\Android\support\v7\appcompat\res\values ​​\ attrs.xml )

8
JstnPwll

Versuchen Sie dies. Ich habe dies verwendet und es funktioniert sehr gut mit v21.

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

Bewirbt sich 

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

in Theme.AppCompat.Light.DarkActionBar hat bei mir nicht funktioniert. Der Trick war, colorPrimaryDark wie üblich zusammen mit Android:colorPrimary in styles.xml anzugeben 

<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>

und in Einstellung 

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

die Statusbar-Farbe musste nicht im Code festgelegt werden. 

1
Annu

Vielen Dank für die obigen Antworten, mit Hilfe derer, nach bestimmten R & D für Xamarin.Android MVVMCross Anwendung, unten gearbeitet

Für Aktivität in der Methode OnCreate angegebenes Flag

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

Für jede MvxActivity wird das Thema wie folgt erwähnt

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

Meine SplashStyle.xml sieht wie folgt aus

<?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>

Und ich habe auf V7 appcompact hingewiesen. 

0
Pallavi