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>
emen
fuente
¿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.

Sohaib
fuente
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>
Zahra.HY
fuente
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.

Muz
fuente
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>
inder_gt
fuente
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

anoopbryan2
fuente
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>
1'hafs
fuente
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>
Abhishek Garg
fuente
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>
Lavanya Velusamy
fuente