oreo - ocultar iconos de la barra de estado android
La barra de estado se vuelve blanca y no muestra contenido detrás de ella (21)
Estoy probando AppCompat en Marshmallow. Y quiero tener una barra de estado transparente, sin embargo, se vuelve blanca. He intentado un par de soluciones pero no funcionaron para mí (la barra de estado transparente no funciona con windowTranslucentNavigation = "false" , Lollipop: dibuje detrás de statusBar con su color configurado como transparente ). Aquí está el código relacionado.
My styles.xml
<style name="Bacon" parent="Theme.Bacon"/>
<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/theme_primary</item>
<item name="colorPrimaryDark">@color/theme_primary_dark</item>
<item name="colorAccent">@color/theme_accent</item>
<item name="windowActionBar">false</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@color/background_material_light</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon"/>
v21
<style name="Bacon" parent="Theme.Bacon">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Actividad
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" />
</FrameLayout>
Fragmento
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:statusBarScrim="@color/black_trans80">
<ImageView
android:id="@+id/photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/photo"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
(Un poco tarde para la fiesta pero podría ayudar a alguien)
Tuve exactamente el mismo problema.
De alguna manera, algunas actividades eran normales, mientras que las nuevas que creé mostraban una barra de estado blanca en lugar del valor
colorPrimaryDark
.
Después de probar varios consejos, me di cuenta de que las actividades normales de trabajo eran todas usando
CoordinatorLayout
como la raíz del diseño, mientras que para los demás lo había reemplazado por diseños regulares porque no necesitaba las características (animación, etc.) proporcionadas por
CoordinatorLayout
.
Entonces, la solución es hacer que
CoordinatorLayout
el diseño raíz, y luego, dentro de él, agregue su raíz de diseño anterior.
Aquí hay un ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<!-- your activity content here-->
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
TENGA EN CUENTA que sin
android:fitsSystemWindows="true"
esta solución no funciona para mí.
Probado en Lollipop y Marshmallow
Agregue esto en su style.xml
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
y esto en tu onCreate ();
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Compruebe que esta barra de herramientas se vuelve blanca: la barra de aplicaciones no se dibuja después de desplazarse fuera de la pantalla
https://code.google.com/p/android/issues/detail?id=178037#c19
Estoy usando bibliotecas 23.0.0. y el error aún ocurre.
Una solución para esto es agregar una vista que casi no ocupa espacio y puede ser invisible. Ver la estructura a continuación.
<android.support.v4.widget.NestedScrollView
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout>
<android.support.v7.widget.Toolbar
app:layout_scrollFlags="scroll|enterAlways" />
<android.support.design.widget.TabLayout
app:layout_scrollFlags="scroll|enterAlways" />
<View
android:layout_width="match_parent"
android:layout_height=".3dp"
android:visibility="visible"/>
</android.support.design.widget.AppBarLayout>
Estas preguntas en .com también se refieren a este error: CoordinatorLayout Toolbar invisible al ingresar hasta altura completa AppBarLayout - El diseño a veces es invisible una vez que ingresa a la vista (incluso si no se ingresó)
Después de intentar sin éxito todo lo anterior, descubrí que establecer explícitamente el tema solucionó el problema.
setTheme(R.style.AppTheme);
Eso tiene que ir antes del super.OnCreate () en tu actividad.
Encontré la respuesta en este enlace: el color de la barra de estado no cambia con el diseño relativo como elemento raíz
Resulta que necesitamos eliminar el
<item name="android:statusBarColor">@android:color/transparent</item>
en styles.xml (v21). Y funciona bien para mí.
Me enfrenté al mismo problema. Lo que hice fue, en el archivo "v21 / styles.xml", cambió el valor verdadero:
<item name="windowDrawsSystemBarBackgrounds">true</item>
a:
<item name="windowDrawsSystemBarBackgrounds">false</item>
Mejor enfoque
Verifique su archivo style.xml donde está su tema NoActionBar. Asegúrese de que tenga padre como Theme.AppCompat.NoActionBar y también personalícelo agregando su esquema de color. Finalmente configure sus temas en manifiesto según sea necesario.
A continuación se muestra una muestra de mi archivo styles.xml (ActionBar + NoActionBar).
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- No ActionBar application theme. -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
No estoy seguro de si es tarde, pero espero que ayude a alguien. * Haga una vista falsa con fondo transparente que se ajuste al diseño, y haga un diseño coordinador como su elemento de diseño raíz.
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:fitsSystemWindows="true" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/something" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
.... YOUR LAYOUT
Para estilos v23
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">@android:color/white</item>
</style>
Para estilos v21
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/white</item>
</style>
Para mí funcionó haciendo lo siguiente:
-
Establecer el tema
.NoActionBar
-
Envuelva la barra de herramientas en
android.support.design.widget.AppBarLayout
-
Haga
android.support.design.widget.CoordinatorLayout
como diseño principal.
Esencialmente, es el tercer paso que dibuja la barra de estado en
colorPrimaryDark
contrario, no se dibujará si usa el tema
NoActionBar
.
El segundo paso le dará a tu barra de herramientas esa
superposición
.
Si está utilizando RelativeLayout / CoordinatorLayout, esta es la solución que funcionó para mí:
Tienes que usar
- CoordinadorDisposición
- AppBarLayout
Recuerde usar CoordinatorLayout en lugar de RelativeLayout (el rendimiento es mejor y funciona perfectamente con AppBarLayout)
Así es como debería comenzar tu fragmento
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/main.appbar"
android:layout_width="match_parent"
android:layout_height="300dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true"
>
...
Buena codificación!
Si su v21 / styles.xml contiene
<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
Luego, elimine o comente debajo de la línea o cambie el color de la barra de estado,
<item name="android:statusBarColor">@android:color/transparent</item>
Está funcionando bien. Espero que esto sea útil. Gracias.
Simplemente elimine la siguiente etiqueta del estilo v21 @android: color / transparente
Esto funciona para mi.
Simplemente ponga este elemento en su v21 / styles.xml:
cierto
Debe tener un aspecto como este :
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
Solucioné mi problema cambiando mi diseño de Actividad de FrameLayout a RelativeLayout. ¡Gracias a todos los que intentaron ayudar!
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/theme_primary_dark"
android:fitsSystemWindows="true" />
</RelativeLayout>
Pruebe hierarchy-viewer o ViewInspector . Estas herramientas pueden ayudarte.
Supongo que esto es causado por su
android:windowBackground
.
¿
@color/background_material_light
una referencia al blanco?
Tienes que agregar esta propiedad a tu estilo para ver el contenido
<item name="android:windowLightStatusBar" tools:ignore="NewApi">true</item>
[
Expanda res -> valores -> directorio de estilos desde el panel del proyecto.
Abra styles.xml (v21)
UTILICE CUALQUIERA DE LAS MANERAS A CONTINUACIÓN
-
Cambie
verdadero
a
falso
en
android:windowDrawsSystemBarBackgrounds
propiedadandroid:windowDrawsSystemBarBackgrounds
. -
Cambie
@android: color / transparent
a
@ color / colorPrimaryDark
en
android:statusBarColor
propiedadandroid:statusBarColor
. -
Elimine la línea de propiedad
android:statusBarColor
.
verifique los esquemas de color implementados en styles-21
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
</style
Simplemente reemplace esto, statusBarColor debe ser su color esperado y no TRANSPARENTE
<item name="android:statusBarColor">@android:color/transparent</item>
Verá esa línea de código en values / styles / styles.xml (v21). Eliminarlo y eso resuelve el problema
Enlace a esta respuesta