He configurado el color de mi barra de estado en transparente para Lollipop solo con la siguiente línea en mi tema:
<item name="android:statusBarColor">@android:color/transparent</item>
Ahora necesito dibujar detrás de él, pero no puedo ver ningún dibujo detrás. Sé cómo hacerlo con la windowTranslucentStatus
propiedad, pero no quiero usar esta propiedad, ya que ignorará el color del statusBar establecido en transparente.
android
android-ui
android-5.0-lollipop
alxscms
fuente
fuente
android:fitsSystemWindows="true"
Respuestas:
Método 1:
Para lograr una barra de estado completamente transparente, debe usar
statusBarColor
, que solo está disponible en API 21 y superior.windowTranslucentStatus
está disponible en API 19 y superior, pero agrega un fondo teñido para la barra de estado. Sin embargo, la configuraciónwindowTranslucentStatus
logra una cosa que no es el cambiostatusBarColor
a transparente: establece las banderasSYSTEM_UI_FLAG_LAYOUT_STABLE
ySYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
. La forma más fácil de obtener el mismo efecto es establecer manualmente estos indicadores, lo que desactiva de manera efectiva las inserciones impuestas por el sistema de diseño de Android y te deja valerte por ti mismo.Llama a esta línea en su
onCreate
método:Asegúrese de establecer también la transparencia en /res/values-v21/styles.xml:
O establezca la transparencia mediante programación:
El lado bueno de este enfoque es que los mismos diseños y diseños también se pueden usar en API 19 al cambiar la barra de estado transparente por la barra de estado translúcida teñida.
Método 2:
Si solo necesita pintar una imagen de fondo debajo de su barra de estado, en lugar de colocar una vista detrás de ella, esto puede hacerse simplemente configurando el fondo del tema de su actividad a la imagen deseada y configurando la transparencia de la barra de estado como se muestra en el método # 1) Este fue el método que usé para crear las capturas de pantalla para el artículo de Android Police de hace unos meses.
Método 3:
Si tiene que ignorar las inserciones del sistema estándar para algunos diseños mientras los mantiene trabajando en otros, la única forma viable de hacerlo es trabajar con la
ScrimInsetsFrameLayout
clase a menudo vinculada . Por supuesto, algunas de las cosas que se hacen en esa clase no son necesarias para todos los escenarios. Por ejemplo, si no planea usar la superposición de la barra de estado sintética, simplemente comente todo en elinit()
método y no se moleste en agregar nada al archivo attrs.xml. He visto que este enfoque funciona, pero creo que encontrará que trae algunas otras implicaciones que pueden ser mucho trabajo para sortear.También vi que te opones a envolver múltiples diseños. En el caso de envolver un diseño dentro de otro, donde ambos tienen
match_parent
altura y ancho, las implicaciones de rendimiento son demasiado triviales para preocuparse. En cualquier caso, puede evitar esa situación por completo cambiando la clase que se extiendeFrameLayout
a cualquier otro tipo de clase de diseño que desee. Funcionará bien.fuente
SYSTEM_UI_FLAG_LAYOUT_STABLE
ySYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
fue la solución que estaba buscando.CollapsingToolbarLayout
yToolbar
: la barra de estado no es completamente translúcida yandroid:statusBarColor
no tiene efectoEsto funcionó para mi caso
Para obtener más información sobre cómo trabajar con statusBars: youtube.com/watch?v=_mGDMVRO3iE
fuente
Prueba este tema
Asegúrese de que su conjunto de diseño
fuente
android:fitsSystemWindows="false"
es cortar la barra de herramientas por la mitad.En vez de
Use lo siguiente:
Y asegúrese de eliminar el relleno superior (que se agrega de forma predeterminada) en su diseño 'MainActivity'.
Tenga en cuenta que esto no hace que la barra de estado sea completamente transparente, y todavía habrá una superposición "negro desvaído" sobre su barra de estado.
fuente
<item name="android:windowTranslucentStatus">true</item>
, hace que Android ponga un fondo negro descolorido debajo de la barra de estado, que no es lo que estoy buscando. ¿Alguna forma de no tener este fondo negro desteñido?La solución de Cody Toombs casi me funcionó. No estoy seguro de si esto está relacionado con Xamarin o no, pero ahora tengo una solución aceptable:
Esta es mi configuración:
Tengo un proyecto de Android en el que hice referencia a los paquetes de Android. V4 y v7. Tengo dos estilos definidos:
valores / styles.xml:
values-v21 / styles.xml:
AndroidManifest apunta a "MyStyle":
AndroidManifest.xml:
Y finalmente el código en la Actividad principal:
Tenga en cuenta que configuro el indicador DrawsSystemBarBackgrounds, esto hace toda la diferencia
Pasé mucho tiempo haciendo las cosas bien, de hecho demasiado tiempo. Esperemos que esta respuesta ayude a cualquiera que intente lograr lo mismo.
fuente
android:windowTranslucentStatus
requiere un nivel de API 19 o superior, ¿cómo es posible que lo esté usando en sus valores / styles.xml mientras tiene unandroid:minSdkVersion
10?La respuesta de @Cody Toombs condujo a un problema que trae el diseño detrás de la barra de navegación. Entonces, lo que encontré es usar esta solución dada por @Kriti
Aquí está el fragmento de código de Kotlin para el mismo:
También necesitas agregar
Vista raíz de su diseño.
fuente
Tuve el mismo problema, así que creo ImageView que se dibuja detrás de la barra de estado API 19+
Establecer imagen personalizada detrás de la barra de estado gist.github.com
fuente
Puede usar ScrimInsetFrameLayout
https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java
android: fitsSystemWindows = "true" debería establecerse en el diseño de cañamazo!
fuente
RelativeLayout
lugar de unFrameLayout
?Similar a algunas de las soluciones publicadas, pero en mi caso hice la barra de estado transparente y fijé la posición de la barra de acción con un margen negativo
Y usé en la barra de herramientas y la vista raíz
fuente
Hay una buena biblioteca StatusBarUtil de @laobie que ayuda a dibujar fácilmente la imagen en StatusBar.
Solo agrega tu
build.gradle
:Luego en el conjunto de actividades
En el diseño
Para obtener más información, descargue la demo o clone desde la página de Github y juegue con todas las funciones.
Nota: Soporte KitKat y superior.
¡Espero que ayude a alguien más!
fuente
Con Android Studio 1.4, el proyecto de plantilla con código de placa de caldera establece el
Overlay
tema en su AppbarLayout y / o Toolbar. También están configurados para representarse detrás de la barra de estado porfitSystemWindow
atributo = verdadero. Esto hará que solo la barra de herramientas se represente directamente debajo de la barra de estado y todo lo demás se mostrará debajo de la barra de herramientas. Por lo tanto, las soluciones proporcionadas anteriormente no funcionarán por sí mismas. Deberá realizar los siguientes cambios.Ponga el siguiente código en su archivo styles-21.xml .
@android: color / transparente
Asigne este tema a la actividad que contiene el cajón de navegación en el archivo AndroidManifest.xml .
Esto hará que el cajón de navegación se muestre detrás de la barra de estado transparente.
fuente
Todo lo que necesitas hacer es establecer estas propiedades en tu tema
fuente
La respuesta aceptada funcionó para mí usando un CollapsingToolbarLayout. Sin embargo, es importante tener en cuenta que
setSytstemUiVisibility()
anula cualquier llamada previa a esa función. Entonces, si está utilizando esa función en otro lugar para la misma vista, debe incluir los indicadoresView.SYSTEM_UI_FLAG_LAYOUT_STABLE
yView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
, o se anularán con la nueva llamada.Este fue mi caso, y una vez que agregué las dos banderas al otro lugar al que estaba llamando
setSystemUiVisibility()
, la respuesta aceptada funcionó perfectamente.fuente
Agregaré más información aquí. Los últimos desarrollos de Android han hecho que sea bastante fácil manejar muchos casos en la barra de estado. Las siguientes son mis observaciones de la
styles.xml
<item name="android:windowTranslucentStatus">true</item>
hará que la barra de estado sea transparente y se muestre frente a la interfaz de usuario. Su actividad ocupará todo el espacio de la parte superior.Color de fondo : nuevamente, para SDK 21+,
<item name="android:statusBarColor">@color/your_color</item>
simplemente le dará un color a su barra de estado, sin afectar nada más.Sin embargo, en dispositivos posteriores (Android M / +), los íconos comenzaron a aparecer en diferentes tonos. El sistema operativo puede dar un tono más oscuro de gris a los iconos para SDK 23 / +, si anula su
styles.xml
archivo en lavalues-23
carpeta y agrega<item name="android:windowLightStatusBar">true</item>
.De esta manera, proporcionará a su usuario una barra de estado más visible, si su barra de estado tiene un color claro (piense en cómo muchas aplicaciones de Google tienen un fondo claro pero los iconos son visibles allí en un color grisáceo).
Te sugiero que uses esto, si estás dando color a tu barra de estado a través del punto # 2
En los dispositivos más recientes, SDK 29 / + viene con un tema amplio de luz y oscuridad del sistema, controlable por el usuario. Como desarrolladores, también se supone que debemos anular nuestro archivo de estilo en una nueva
values-night
carpeta, para brindarle al usuario 2 experiencias diferentes.Aquí nuevamente, he encontrado que el punto # 2 es efectivo para proporcionar el "color de fondo a la barra de estado". Pero el sistema no estaba cambiando el color de los iconos de la barra de estado para mi aplicación. Dado que mi versión de estilo del día consistía en un tema más claro, esto significa que los usuarios sufrirán una baja visibilidad (iconos blancos sobre un fondo más claro).
Este problema se puede resolver utilizando el enfoque del punto n. ° 3 o anulando el archivo de estilo en la
values-29
carpeta y utilizando uno más nuevo api<item name="android:enforceStatusBarContrast">true</item>
. Esto aplicará automáticamente el tinte grisáceo a los iconos, si el color de fondo es demasiado claro.fuente
Aquí está el tema que uso para lograr esto:
fuente
La solución correcta es cambiar una propiedad en XML debajo de su etiqueta de actividad al siguiente estilo. Solo funciona
fuente