Cambiar el color de la barra de estado con AppCompat ActionBarActivity
En mi única Actividad cambio el color de la barra de herramientas usando Palette
pero en dispositivos 5.0 usando ActionBarActivity
el color status bar
es el color de mi colorPrimaryDark
en mi tema de actividad, así que tengo 2 colores muy diferentes y no se ve bien.
Me doy cuenta de que en 5.0 puedes usar Window.setStatusBarColor()
pero ActionBarActivity
no tiene esto.
Así que mi pregunta está en 5.0 ¿cómo puedo cambiar el color de la barra de estado con ActionBarActivity
?
6 answers
No estoy seguro de entender el problema.
Si desea cambiar el color de la barra de estado mediante programación (y siempre que el dispositivo tenga Android 5.0), entonces puede usar Window.setStatusBarColor()
. No debería hacer una diferencia si la actividad se deriva de Activity
o ActionBarActivity
.
Solo intenta hacer:
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);
}
Acabo de probar esto con ActionBarActivity
y funciona bien.
Nota: Configurar el indicador FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
mediante programación no es necesario si su archivo de estilos values-v21
lo tiene establecer ya, vía:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-27 20:19:30
Hay varias formas de cambiar el color de la barra de estado.
1) Usando los estilos.XML. Puedes usar el atributo android:statusBarColor para hacer esto de una manera fácil pero estática.
Nota: También puede usar este atributo con el tema 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) Puede hacerlo dinámicamente usando el método setStatusBarColor(int) en la clase Window. Pero recuerde que este método solo está disponible para API 21 o superior. Así que asegúrese de comprobar que, o su aplicación seguramente choque en dispositivos inferiores.
Aquí hay un ejemplo de trabajo de este método.
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));
}
Donde primaryDark es el tinte 700 del color primario que estoy usando en mi aplicación. Puede definir este color en los colores.archivo xml.
Pruébelo y hágamelo saber si tiene alguna pregunta. Espero que ayude.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-11 07:45:40
No creo que el color de la barra de estado se haya implementado en AppCompat todavía. Estos son los atributos que están 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" />
(De \sdk\extras\android\support\v7\appcompat\res\values\attrs.xml)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 22:35:45
Prueba esto, Usé esto y funciona muy bien con v21.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimaryDark">@color/blue</item>
</style>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-18 14:51:22
Aplicando
<item name="android:statusBarColor">@color/color_primary_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
{[6] {} En[3]} no funcionó para mí. Lo que hizo el truco es, dando colorPrimaryDark
como de costumbre junto con android:colorPrimary
en estilos.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>
Y en el ajuste
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window window = this.Window;
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
No tenía que establecer el color de la barra de estado en el código .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 06:15:26
Gracias por las respuestas anteriores, con la ayuda de aquellos, después de cierto I + D para xamarin.android MvvmCross aplicación, a continuación trabajó
Bandera especificada para la actividad en el método onCreate
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
Para cada MvxActivity, el tema se menciona a continuación
[Activity(
LaunchMode = LaunchMode.SingleTop,
ScreenOrientation = ScreenOrientation.Portrait,
Theme = "@style/Theme.Splash",
Name = "MyView"
)]
Mi SplashStyle.xml se ve como a continuación
<?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>
Y tengo V7 appcompact referido.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-26 10:28:23