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