web-dev-qa-db-fra.com

Barre d'outils se chevauchant sous la barre d'état

Je souhaite avoir la barre d'outils appcompat v21 dans mon activité. Mais la barre d'outils que j'implémente se chevauche sous la barre d'état. Comment puis-je le réparer?

overlapping toolbar

Voici la mise en page d'activité 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>

Vue de la barre d’outils:

<?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" />

Style de thème:

<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>
129
SanicBoom

Utilisez Android:fitsSystemWindows="true" dans la vue racine de votre mise en page (LinearLayout dans votre cas). Et Android:fitsSystemWindows est un 

attribut internal pour ajuster la disposition des vues en fonction des fenêtres système telles que comme la barre d'état. Si true, ajuste le remplissage de cette vue pour laisser espace pour les fenêtres système. Ne prendra effet que si cette vue est en une activité non intégrée.

Doit être une valeur booléenne, "true" ou "false".

Cela peut également être une référence à une ressource (sous la forme "@ [Paquet:] type: nom") ou à un attribut de thème (sous la forme "?? [Paquet:] [type:] nom") contenant une valeur de ce type.

Cela correspond au symbole de ressource d'attribut global fitsSystemWindows.

221
Sohaib

Il suffit de définir ceci au fichier v21/styles.xml

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

et sois sur 

 <item name="Android:windowTranslucentStatus">false</item>
17
Zahra.HY

Aucune des réponses n’a fonctionné pour moi, mais c’est ce qui a finalement fonctionné après avoir défini Android:fitSystemWindows sur la vue racine (dans les styles v21):

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

Assurez-vous que not n'a pas la ligne suivante car AS le met par défaut:

<item name="Android:statusBarColor">@Android:color/transparent</item>
10
inder_gt

Pour moi, le problème était que j'ai copié quelque chose d'un exemple et utilisé

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

le simple fait de supprimer ce problème a résolu mon problème.

8
Muz

J'ai supprimé toutes les lignes mentionnées ci-dessous de /res/values-v21/styles.xml et maintenant, cela fonctionne 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>
4
fɪəlɪs

Aucune des réponses n'a fonctionné pour moi, mais c'est ce qui a finalement fonctionné après avoir défini Android: fitsSystemWindows = "false"  

dans le fichier de mise en page de l'activité parente, cela n'est pas suggéré à plusieurs endroits, mais c'est un travail qui me permet de sauver la journée

2
anoopbryan2

Supprimer les lignes ci-dessous du style ou du style (21)

<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
<item name="Android:statusBarColor">@color/colorPrimaryDark</item>
<item name="Android:windowTranslucentStatus">false</item>
0
Lavanya Velusamy

Selon Google Docs, nous ne devrions pas utiliser l'attribut fitsSystemWindows dans le thème de l'application, il est destiné à être utilisé dans les fichiers de présentation. L'utilisation de thèmes peut causer des problèmes dans les messages de pain grillé. 

Problème de contrôle ici & exemple de problème causé ici

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

Exemple d'utilisation correcte et qui fonctionne bien avec windowTranslucentStatus également.

<?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
Abhiode