La barre d'outils se chevauche sous la barre d'état

168

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 y remédier?

barre d'outils qui se chevauchent

Voici la mise en page de l'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>
emen
la source
Comment avez-vous personnalisé votre application Theme? les poster.
SilentKnight
en CoordinatorLayoutvous pouvez essayer ceci: stackoverflow.com/a/47906087/2201814
MHSFisher
pour ceux qui sont confrontés au problème avec androidx.coordinatorlayout.widget.CoordinatorLayout en tant que vue racine, il faut définir android: fitsSystemWindows = "false". cela a fonctionné pour moi ... comme suggéré par l'un des utilisateurs SO ci-dessous ..
Muahmmad Tayyib

Réponses:

273

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

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

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

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

Cela correspond au symbole de ressource d'attribut global correspond àSystemWindows.

Sohaib
la source
22
@AimanB vous pouvez le définir globalement en définissant le thème comme <item name="android:fitsSystemWindows">true</item>
Samir
13
@Samir cela a un effet secondaire comme rapporté dans ce commentaire
Sufian
9
Ce problème viendra même après que nous ayons ajouté android: fitSystemWindows = "true" à la disposition racine, si votre style contient <item name = "android: statusBarColor"> @ android: color / transparent </item> this. Juste mentionné pour ceux qui lisent cette question.
Sakkeer Hussain
3
J'ai le même problème et l'androïde: fitSystemWindows = "true" ne fonctionnait pas pour moi. Tout le monde a des solutions, veuillez poster.
Jatin
1
Cette réponse a résolu mon problème. Mais maintenant, je trouve tous les toasts Android avec 0 rembourrage!
kds23
18

Définissez simplement ceci sur le fichier v21 / styles.xml

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

et sois sûr

 <item name="android:windowTranslucentStatus">false</item>
Zahra.HY
la source
1
si vous avez quelque chose comme app: layout_behavior = "@ string / appbar_scrolling_view_behavior", supprimez-le! @TheHunter
Zahra.HY
set <item name = "android: windowTranslucentStatus"> false </item>
Zahra.HY
10

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

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

supprimer simplement cela a résolu mon problème.

Muz
la source
10

Aucune des réponses n'a fonctionné pour moi, mais c'est ce qui a finalement fonctionné après avoir défini android:fitSystemWindowsla vue racine (je les ai définies dans les styles v21):

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

Assurez-vous que vous n'avez pas la ligne suivante comme AS le met par défaut:

<item name="android:statusBarColor">@android:color/transparent</item>
inder_gt
la source
6

Aucune des réponses n'a fonctionné pour moi, mais c'est ce qui a finalement fonctionné après le montage:

android:fitsSystemWindows="false"

Dans le fichier de mise en page de l'activité des parents, ce n'est pas suggéré à de nombreux endroits, mais cela fonctionne pour moi et me sauve la journée

anoopbryan2
la source
Cela a fonctionné pour moi également lorsque ma vue racine dans la mise en page était un androidx.coordinatorlayout.widget.CoordinatorLayouttype.
Faheem Ezani le
5

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>
1'hafs
la source
0

Selon google docs, nous ne devons pas utiliser l'attribut fitSystemWindows dans le thème de l'application, il est destiné à être utilisé dans les fichiers de mise en page. L'utilisation de thèmes peut poser des problèmes dans les messages toast.

Vérifiez le problème ici et un 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>
Abhishek Garg
la source
0

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>
Lavanya Velusamy
la source