J'ai vu dans la nouvelle conception de matériaux Side Nav spec que vous pouvez afficher le tiroir sur la barre d'action et derrière la barre d'état. Comment puis-je implémenter cela?
android
navigation-drawer
android-appcompat
Chris Banes
la source
la source
Réponses:
De nouvelles fonctionnalités dans le cadre et les bibliothèques de support permettent exactement cela. Il y a trois «pièces du puzzle»:
fitsSystemWindows
pour qu'il soit disposé derrière les barres système.Theme.Material
la coloration normale de la barre d'état pour que DrawerLayout puisse y dessiner à la place.Je suppose que vous utiliserez la nouvelle application compatible.
Tout d'abord, votre mise en page devrait ressembler à ceci:
Puis dans votre activité / fragment:
Ensuite, vous devez vous assurer que le DrawerLayout est visible derrière la barre d'état. Pour ce faire, vous changez votre thème valeurs-v21:
values-v21 / themes.xml
Remarque: si un
<fragment android:name="fragments.NavigationDrawerFragment">
est utilisé au lieu dela disposition réelle, l'effet souhaité sera obtenu si vous appelez
fitsSystemWindows(boolean)
une vue que vous revenez de laonCreateView
méthode.la source
DrawerLayout
il doit être disposé derrière les barres du système. Vous devez ensuite le définir sur la vue du tiroir afin deDrawerLayout
le disposer dans les encarts de fenêtre.layout_marginTop
dans la racine de la disposition de votre contenu de tiroir. Sinon, l'arrière-plan de la disposition du contenu de votre tiroir sera dessiné en haut de la barre d'état, et tout le reste sera poussé vers le bas. Cela semble cependant être une solution un peu grossière, pour autant que je sache, il n'y a pas? Attr / statusBarSize ou quelque chose comme ça fourni par Android.EDIT: la nouvelle bibliothèque de support de conception prend en charge cela et la méthode précédente n'est plus nécessaire.
Cela peut maintenant être réalisé en utilisant la nouvelle bibliothèque de support de conception Android .
Vous pouvez voir l' exemple d'application Cheesesquare de Chris Banes qui présente toutes les nouvelles fonctionnalités.
Méthode précédente:
Puisqu'il n'y a pas de solution complète publiée, voici comment j'ai obtenu le résultat souhaité.
Incluez d' abord un ScrimInsetsFrameLayout dans votre projet.
Ensuite, créez un styleable afin que le
insetForeground
puisse être réglé.values / attrs.xml
Mettre à jour le fichier xml de votre activité et assurez - vous
android:fitsSystemWindows
est fixé à vrai sur les deuxDrawerLayout
, ainsi que leScrimInsetsFrameLayout
.layout / activity_main.xml
Dans la méthode onCreate de votre activité, définissez la couleur d'arrière-plan de la barre d'état sur la disposition du tiroir.
MainActivity.java
Enfin, mettez à jour le thème de votre application pour que le
DrawerLayout
soit derrière la barre d'état.values-v21 / styles.xml
Résultat:
la source
Avec la sortie de la dernière bibliothèque de support Android (rev 22.2.0), nous avons une bibliothèque de support de conception et dans le cadre de cette nouvelle vue appelée NavigationView . Donc, au lieu de tout faire par nous-mêmes avec
ScrimInsetsFrameLayout
toutes les autres choses, nous utilisons simplement cette vue et tout est fait pour nous.Exemple
Étape 1
Ajoutez le
Design Support Library
à votrebuild.gradle
fichierÉtape 2
Ajoutez le
NavigationView
à votreDrawerLayout
:Étape 3
Créez une nouvelle ressource de menu dans
/res/menu
et ajoutez les éléments et les icônes que vous souhaitez afficher:Étape 4
Initiez la NavigationView et gérez les événements de clic:
Étape 5
Assurez - vous de jeu
android:windowDrawsSystemBarBackgrounds
etandroid:statusBarColor
dansvalues-v21
sinon votre tiroir s'affiche gagné le `t « sous » la barre d' étatÉtape facultative
Ajoutez un en-tête à NavigationView. Pour cela, créez simplement une nouvelle mise en page et ajoutez-la
app:headerLayout="@layout/my_header_layout"
à NavigationView.Résultat
Remarques
colorPrimary
attributtextColorPrimary
attributtextColorSecondary
attributVous pouvez également consulter l' exemple d'application de Chris Banes qui met en évidence la NavigationView ainsi que les autres nouvelles vues qui font partie de la bibliothèque de support de conception (comme FloatingActionButton , TextInputLayout , Snackbar , TabLayout etc.)
la source
<item name="itemTextColor">@color/YOUR_COLOR</item>
<item name="itemIconTint">@color/YOUR_COLOR</item>
Toolbar
- il n'y a aucun moyen de le faire avec unActionBar
mDrawerLayout.openDrawer(GravityCompat.START);
où vous voulez. Si vous utilisez un,ActionBarDrawerToggle
cela devrait être fait automatiquement dès que vous cliquez sur l'icône du hamburger.Faites-le fonctionner, dans les styles values-v21 ou le thème xml doit utiliser cet attribut:
<item name="android:windowTranslucentStatus">true</item>
Ça fait la magie!
la source
Les approches ci-dessus sont correctes et peuvent fonctionner. J'ai créé une démo fonctionnelle en suivant le guide ci-dessus et testé sur 2.x à 5.x
Vous pouvez cloner à partir de Github
La chose importante à jouer est dans l'activité principale
et le rappel
Absolument le thème pour V21 fait la magie
et ScrimInsetsFrameLayout
Maintenant, cela devient plus facile avec la nouvelle bibliothèque de support de conception
clone de @Chris Banes https://github.com/chrisbanes/cheesesquare
la source
Toutes les réponses mentionnées ici sont trop anciennes et trop longues. La meilleure et courte solution qui fonctionne avec la dernière Navigationview est
cela va changer la couleur de votre barre d'état en transparent lorsque vous ouvrez le tiroir
Maintenant, lorsque vous fermez le tiroir, vous devez à nouveau changer la couleur de la barre d'état en sombre, vous pouvez donc le faire de cette façon.
puis dans la mise en page principale, ajoutez une seule ligne ie
et la disposition de votre tiroir ressemblera
et votre vue de navigation ressemblera
Je l'ai testé et il fonctionne pleinement.J'espère qu'il aide quelqu'un.Ce n'est peut-être pas la meilleure approche, mais cela fonctionne bien et est simple à mettre en œuvre. Marquez-le si cela vous aide.Codage heureux :)
la source
J'utilise la bibliothèque de support de conception. Et juste en utilisant un thème personnalisé, j'ai réalisé une barre d'état transparente lors de l'ouverture du tiroir de navigation.
Enfin ajouter un thème dans le fichier manifeste
N'oubliez pas d'utiliser la propriété,
android:fitsSystemWindows="true"
dans "DrawerLayout"la source
C'est le plus simple, et cela a fonctionné pour moi:
Dans les valeurs-21:
Dans les valeurs:
Et réglez sur votre barre d'outils
la source
24dp
pour la marge supérieure.Au lieu d'utiliser le
ScrimInsetsFrameLayout
... N'est-il pas plus facile d'ajouter simplement une vue avec une hauteur fixe24dp
et un arrière-plan deprimaryColor
?Je comprends que cela implique l'ajout d'une vue factice dans la hiérarchie, mais cela me semble plus propre.
Je l'ai déjà essayé et ça marche bien.
la source
Essayez avec ceci:
style:
L'activité principale étend ActionBarActivity
Maintenant, vous pouvez
onCreateOptionsMenu
aimer comme ActionBar normal avec ToolBar.Ceci est ma mise en page
J'espère que vous comprenez! Amusez-vous!
la source