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