dans mon activité, je change la couleur de la barre d’outils en utilisant Palette
, mais sur les périphériques 5.0 en utilisant ActionBarActivity
, la couleur status bar
est la couleur de ma colorPrimaryDark
dans mon thème d’activité.
Je réalise que dans la version 5.0, vous pouvez utiliser Window.setStatusBarColor()
mais ActionBarActivity
ne l’a pas.
ma question est donc dans 5.0 comment puis-je changer la couleur de la barre d'état avec ActionBarActivity
?
Je ne suis pas sûr de comprendre le problème.
Si vous souhaitez modifier la couleur de la barre d'état par programme (et à condition que l'appareil dispose d'Android 5.0), vous pouvez utiliser Window.setStatusBarColor()
. Que l'activité soit dérivée de Activity
ou ActionBarActivity
ne devrait pas faire de différence.
Essayez juste de faire:
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);
}
Vient de tester cela avec ActionBarActivity
et cela fonctionne bien.
Remarque: Il n'est pas nécessaire de définir l'indicateur FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
par programme si votre fichier de styles values-v21
l'a déjà défini, via:
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
Il existe différentes façons de changer la couleur de la barre d'état.
1) Utilisation du fichier styles.xml. Vous pouvez utiliser l'attribut Android: statusBarColor pour le faire de manière simple mais statique.
Remarque: vous pouvez également utiliser cet attribut avec le thème Matériau.
<?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) Vous pouvez le faire de manière dynamique en utilisant la méthode setStatusBarColor (int) dans la classe Window. Mais rappelez-vous que cette méthode est uniquement disponible pour API 21 ou supérieure. Assurez-vous donc de vérifier cela, sinon votre application se bloquera sûrement dans les périphériques inférieurs.
Voici un exemple de travail de cette méthode.
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));
}
où primaryDark est la teinte 700 de la couleur primaire que j'utilise dans mon application. Vous pouvez définir cette couleur dans le fichier colors.xml.
Essayez-le et laissez-moi savoir si vous avez des questions. J'espère que ça aide.
Je ne pense pas que la couleur de la barre d'état ait été implémentée dans AppCompat pour le moment. Ce sont les attributs qui sont disponibles:
<!-- ============= -->
<!-- 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" />
(À partir de\sdk\extras\Android\support\v7\appcompat\res\values \ attrs.xml )
Essayez ceci, Je l’ai utilisé et cela fonctionne très bien avec v21.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimaryDark">@color/blue</item>
</style>
Appliquer
<item name="Android:statusBarColor">@color/color_primary_dark</item>
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
dans Theme.AppCompat.Light.DarkActionBar
n'a pas fonctionné pour moi. Quel est le truc, donner colorPrimaryDark
comme d'habitude avec Android:colorPrimary
dans styles.xml
<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>
et dans la mise
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window window = this.Window;
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
n'a pas eu à définir la couleur de la barre d'état dans le code.
Merci pour les réponses ci-dessus, avec l'aide de ceux-ci, après certaines recherches et développement pour xamarin.Android MVVMCross
Indicateur spécifié pour l'activité dans la méthode OnCreate
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
Pour chaque activité MvxActivity, le thème est mentionné ci-dessous
[Activity(
LaunchMode = LaunchMode.SingleTop,
ScreenOrientation = ScreenOrientation.Portrait,
Theme = "@style/Theme.Splash",
Name = "MyView"
)]
Mon SplashStyle.xml ressemble à ce qui suit
<?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>
Et j'ai V7 appcompact référé.