Barra de herramientas superpuesta debajo de la barra de estado


168

Quiero tener la barra de herramientas appcompat v21 en mi actividad. Pero la barra de herramientas que estoy implementando se superpone debajo de la barra de estado. ¿Cómo puedo arreglarlo?

barra de herramientas superpuesta

Aquí está el diseño de la actividad xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

Vista de barra de herramientas:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

Estilo del tema:

<style name="AppTheme" parent="MaterialNavigationDrawerTheme.Light.DarkActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

¿Cómo personalizaste Themetu aplicación? publicarlos
SilentKnight

en CoordinatorLayoutpuede probar esto: stackoverflow.com/a/47906087/2201814
MHSFisher

para aquellos que enfrentan el problema con androidx.coordinatorlayout.widget.CoordinatorLayout como vista raíz, debería establecer android: fitsSystemWindows = "false". Esto funcionó para mí ... como lo sugirió uno de los usuarios de SO a continuación ...
Muahmmad Tayyib

Respuestas:


273

Úselo android:fitsSystemWindows="true"en la vista raíz de su diseño (LinearLayout en su caso). Y android:fitsSystemWindowses un

atributo interno para ajustar el diseño de la vista en función de las ventanas del sistema, como la barra de estado. Si es verdadero, ajusta el relleno de esta vista para dejar espacio para las ventanas del sistema. Solo tendrá efecto si esta vista está en una actividad no incrustada.

Debe ser un valor booleano, "verdadero" o "falso".

Esto también puede ser una referencia a un recurso (en la forma "@ [paquete:] tipo: nombre") o atributo del tema (en la forma "? [Paquete:] [tipo:] nombre") que contiene un valor de este tipo .

Esto corresponde al símbolo de recurso de atributo global fitsSystemWindows.


22
@AimanB puede configurarlo globalmente configurando el tema como <item name="android:fitsSystemWindows">true</item>
Samir

13
@Samir esto tiene un efecto secundario como se informó en este comentario
Sufian

9
Este problema surgirá incluso después de agregar android: fitsSystemWindows = "true" al diseño raíz, si su estilo contiene <item name = "android: statusBarColor"> @ android: color / transparent </item> esto. Recién mencionado para aquellos que están leyendo esta pregunta.
Sakkeer Hussain

3
Tengo el mismo problema y el android: fitsSystemWindows = "true" no funcionó para mí. Cualquiera tiene soluciones esto por favor publicar.
Jatin

1
Esta respuesta solucionó mi problema. ¡Pero ahora encuentro todas las tostadas de Android con 0 relleno!
kds23

18

Simplemente configure esto en el archivo v21 / styles.xml

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@color/colorPrimaryDark</item>

y estar seguro

 <item name="android:windowTranslucentStatus">false</item>

1
si tiene algo como app: layout_behavior = "@ string / appbar_scrolling_view_behavior", ¡quítelo! @TheHunter
Zahra.HY

set <item name = "android: windowTranslucentStatus"> false </item>
Zahra.HY

10

Para mí, el problema era que copié algo de un ejemplo y usé

<item name="android:windowTranslucentStatus">true</item>

solo eliminar esto solucionó mi problema.


10

Ninguna de las respuestas funcionó para mí, pero esto es lo que finalmente funcionó después de configurar android:fitSystemWindowsen la vista raíz (las configuré en los estilos v21):

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">false</item>

Asegúrese de no tener la siguiente línea como AS la pone por defecto:

<item name="android:statusBarColor">@android:color/transparent</item>

6

Ninguna de las respuestas funcionó para mí, pero esto es lo que finalmente funcionó después de configurar:

android:fitsSystemWindows="false"

En el archivo de diseño de actividades para padres no se sugiere en muchos lugares, pero es un trabajo para mí y me salva el día


Esto funcionó para mí también cuando mi vista raíz en el diseño era de androidx.coordinatorlayout.widget.CoordinatorLayouttipo.
Faheem Ezani

5

Eliminé todas las líneas mencionadas a continuación de /res/values-v21/styles.xml y ahora funciona bien.

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@android:color/transparent</item>


 <item name="windowActionBar">false</item>
 <item name="android:windowDisablePreview">true</item>

 <item name="windowNoTitle">true</item>

 <item name="android:fitsSystemWindows">true</item>

0

Según los documentos de Google, no debemos usar el atributo fitsSystemWindows en el tema de la aplicación, está destinado a usarse en archivos de diseño. El uso en temas puede causar problemas en los mensajes de tostadas.

Marque el problema aquí y el ejemplo del problema causado aquí

<item name="android:fitsSystemWindows">true</item>

Ejemplo de uso de la forma correcta y que también funciona bien con windowTranslucentStatus .

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"

android:fitsSystemWindows="true"

android:layout_width="match_parent"
android:layout_height="match_parent"
> 


<include layout="@layout/toolbar"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
</include>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    android:background="@color/white"
    android:animateLayoutChanges="true"
    app:headerLayout="@layout/navigation_drawer_header"
    app:menu="@menu/navigation_drawer_menu" />

</android.support.v4.widget.DrawerLayout>

0

Eliminar las líneas siguientes del estilo o estilo (21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.