L’équipe de conception de matériel de Google définit les fonctionnalités d’un tiroir de navigation sous Android comme suit:
Le tiroir de navigation se glisse depuis la gauche et contient les destinations de navigation pour votre application..
L'application Inbox de Google est un exemple d'application Android populaire qui implémente le tiroir de navigation. Elle utilise un tiroir de navigation pour naviguer dans différentes sections de l'application. Vous pouvez le vérifier vous-même en téléchargeant l'application Boîte de réception à partir du Google Play Store, si vous ne l'avez pas déjà sur votre appareil. La capture d'écran ci-dessous montre Boîte de réception avec le tiroir de navigation tiré ouvert.
L'utilisateur peut visualiser le tiroir de navigation lorsqu'il fait glisser son doigt du bord gauche de l'activité. Ils peuvent également le trouver dans l'activité de la maison (niveau supérieur de l'application), en appuyant sur l'icône de l'application (également appelé menu "hamburger") dans la barre d'action..
Notez que si vous avez plusieurs destinations différentes (plus de six, par exemple) dans votre application, il est recommandé d'utiliser un tiroir de navigation..
Dans cet article, vous allez apprendre à afficher les éléments de navigation dans un tiroir de navigation sous Android. Nous verrons comment utiliser le DrawerLayout
et NavigationView
API pour effectuer cette tâche. En prime, vous apprendrez également à utiliser la fonctionnalité de modèles d'Android Studio pour amorcer rapidement votre projet avec un tiroir de navigation..
Vous trouverez un exemple de projet (en Kotlin) pour ce tutoriel sur notre dépôt GitHub afin que vous puissiez suivre facilement.
Pour pouvoir suivre ce tutoriel, vous aurez besoin de:
Lancez Android Studio et créez un nouveau projet (vous pouvez le nommer NavigationDrawerDemo
) avec une activité vide appelée Activité principale
. Assurez-vous également de vérifier le Inclure le support Kotlin case à cocher.
Pour commencer à utiliser DrawerLayout
et NavigationView
dans votre projet, vous devez importer le support de conception ainsi que l'artefact de support Android. Alors ajoutez-les à votre module build.gradle fichier pour les importer.
dépendances implémentation 'com.android.support:design:27.0.2' implémentation 'com.android.support:support-v4:27.0.2'
En outre, inclure les deux DrawerLayout
widget et aussi le NavigationView
widget dans votre res / layout / activlty_main.xml fichier.
Ici nous avons créé un DrawerLayout
widget avec l'identifiant draw_layout
. le outils: openDrawer
Cette propriété est utilisée pour afficher le tiroir de navigation lorsque la présentation XML est ouverte dans la vue Conception d'Android Studio..
La documentation officielle dit ce qui suit à propos de DrawerLayout
:
DrawerLayout
agit comme un conteneur de niveau supérieur pour le contenu de la fenêtre, ce qui permet d'extraire des vues interactives du «tiroir» à partir de l'un ou des deux bords verticaux de la fenêtre.
Après avoir ajouté le DrawerLayout
widget, nous avons inclus une mise en page enfant qui pointe vers @ layout / app_bar_main
.
Voici mon app_bar_main.xml fichier de ressources. Ce fichier a simplement un Coordonnateur
, un AppBarLayout
, et un Barre d'outils
widget.
Enfin, nous avons créé un NavigationView
widget. La documentation officielle dit ce qui suit à propos de NavigationView
:
NavigationView
représente un menu de navigation standard pour l'application. Le contenu du menu peut être renseigné par un fichier de ressources de menu..
dans le NavigationView
Widget XML, vous pouvez voir que nous avons ajouté un Android: layout_gravity
attribut avec valeur début
. Ceci est utilisé pour positionner le tiroir. Vous souhaitez que le tiroir sorte de gauche ou de droite (le début ou la fin sur les versions de plate-forme prenant en charge le sens de la présentation). Dans notre cas, le tiroir va sortir par la gauche.
Nous avons également inclus un app: headerLayout
attribut qui pointe vers @ layout / nav_header_main
. Cela va ajouter un Vue
comme en-tête du menu de navigation.
Voici mon nav_header_main.xml fichier de ressources de mise en page:
Ce fichier de mise en page a simplement un LinearLayout
, un ImageView
, et un Affichage
.
Pour inclure les éléments de menu du tiroir de navigation, nous pouvons utiliser l'attribut app: menu
avec une valeur qui pointe vers un fichier de ressources de menu.
Voici la res / menu / activity_main_drawer.xml fichier de ressources de menu:
Ici nous avons défini un Menu
en utilisant le
qui sert de conteneur pour les éléments de menu. Un
crée un Élément du menu
, qui représente un seul élément dans un menu.
Nous avons ensuite défini notre premier groupe de menus en utilisant le
. UNE
sert de conteneur invisible pour
éléments éléments de menu dans notre cas. Chacun de
elements a un identifiant, une icône et un titre. Notez qu’une ligne horizontale sera tracée à la fin de chaque
pour nous quand montré dans le tiroir de navigation.
UNE
peut également contenir un imbriqué
élément afin de créer un sous-menu, nous venons de le faire dans notre dernier
. Notez que ce dernier
a une propriété de titre.
Notez que lors de l'affichage des éléments de la liste de navigation à partir d'une ressource de menu, nous pourrions utiliser un ListView
au lieu. Mais, en configurant le tiroir de navigation avec une ressource de menu, nous obtenons gratuitement le style de conception des matériaux sur le tiroir de navigation! Si vous avez utilisé un ListView
, vous devez tenir à jour la liste et l'assortir aux spécifications de conception recommandées pour le tiroir de navigation.
Ensuite, nous allons initialiser des instances de notre DrawerLayout
et ActionBarDrawerToggle
. L'initialisation va se passer à l'intérieur onCreate ()
dans MainActivity.kt.
import android.content.res.Configuration import android.os.Bundle import android.support.v4.widget.DrawerLayout import android.support.v7.app.ActionBarDrawerToggle import android.support.v7.app.App.App.AppCompatActivity import android.support.v7 .widget.Toolbar import android.view.MenuItem classe MainActivity: AppCompatActivity () private tardive var tiroir: DrawerLayout privée lateinit var basculée: ActionBarDrawerToggle remplacer fun onCreate (savedInstanceState: Bundle?) (superInonial). .activity_main) val toolbar: Barre d'outils = findViewById (R.id.toolbar_main) setSupportActionBar (barre d'outils) tiroir = findViewById (R.id.drawer_layout) toggle = ActionBarDrawerToggle (this, tiroir, barre d'outils, R.string.navigation_drawen_open,. navigation_drawer_close) tiroir.addDrawerListener (bascule) supportActionBar? .setDisplayHomeAsUpEnabled (true) supportActionBar? .setHomeButtonEnabled (true) //…
le ActionBarDrawerToggle
configure l’icône de l’application située à gauche de la barre d’action ou de la barre d’outils pour ouvrir et fermer le tiroir de navigation. Pour pouvoir créer une instance de ActionBarDrawerToggle
, nous devons fournir les paramètres suivants:
Activité
tu utilises ce
, alors que dans un Fragment
tu appelles getActivity ()
DrawerLayout
widget pour lier à l'activité de Barre d'action
Nous avons invoqué la méthode addDrawerListener ()
sur un DrawerLayout
afin de connecter un ActionBarDrawerToggle
avec un DrawerLayout
.
Notez que nous activons également l'icône de l'application via setHomeButtonEnabled ()
et l'activer pour une navigation "up" via setDisplayHomeAsUpEnabled ()
.
Nous transmettons ensuite le onPostCreate ()
, onConfigurationChanged ()
, et onOptionsItemSelected ()
méthodes de rappel d'activité sur la bascule:
class MainActivity: AppCompatActivity () // ... remplacez fun onPostCreate (savedInstanceState: Bundle?) super.onPostCreate (saveInstanceState) toggle.syncState () onConfigurationChanged (newConfig) redéfinit fun onOptionsItemSelected (item: MenuItem?): Boolean if (toggle.onOptionsItemSelected (item)) return true retour super.onOptionsItemSelected (item)
Voici ce que le syncState ()
selon la documentation officielle:
Synchronise l’état de l’indicateur / de l’abondance du tiroir avec l’attribut DrawerLayout lié… Ceci doit être appelé depuis votreActivité
deonPostCreate
méthode de synchronisation après la restauration de l'état d'instance de DrawerLayout et à tout autre moment où l'état aurait pu diverger de telle sorte que ActionBarDrawerToggle n'a pas été notifié. (Par exemple, si vous arrêtez de transférer les événements de tiroir appropriés pendant un certain temps.)
À ce stade, nous pouvons exécuter l'application!
Comme vous pouvez le constater, le lancement de l'application affiche l'icône du tiroir de navigation «hamburger» dans la barre d'action. Essayez de toucher cette icône d'application pour ouvrir le tiroir. De plus, cliquer sur les éléments du tiroir de navigation ne fera rien. Nous allons traiter cette partie dans la section suivante..
Voyons maintenant comment gérer les événements de clic pour chacun des éléments du tiroir de navigation. Notez que cliquer sur n'importe quel élément est censé vous amener à une nouvelle activité ou fragment, c'est pourquoi cela s'appelle un tiroir de navigation.!
Tout d’abord, votre activité doit implémenter la NavigationView.OnNavigationItemSelectedListener
.
Classe MainActivity: AppCompatActivity (), NavigationView.OnNavigationItemSelectedListener //…
En implémentant ce contrat ou cette interface, nous devons maintenant remplacer la seule méthode: onNavigationItemSelected ()
.
Classe MainActivity: AppCompatActivity (), NavigationView.OnNavigationItemSelectedListener //… remplace fun surNavigationItemSelected (item: MenuItem): Boolean when (item.itemId) R.id.nav_item_one -> Toast.makeText (this, " , Toast.LENGTH_SHORT) .show () R.id.nav_item_two -> Toast.makeText (this, "Article cliqué deux", Toast.LENGTH_SHORT) .show () R.id.nav_item_three -> Toast.makeText (this, " L'élément cliqué trois ", Toast.LENGTH_SHORT) .show () R.id.nav_item_four -> Toast.makeText (this," L'élément cliqué quatre ", Toast.LENGTH_SHORT) .show () return true
Cette méthode est appelée lorsqu'un élément du menu de navigation est sélectionné. Nous avons utilisé le quand
expression pour effectuer différentes actions en fonction de l'élément de menu sur lequel l'utilisateur a cliqué; les identificateurs d'élément de menu servent de constantes pour l'élément quand
expression.
Ensuite, nous devons initialiser notre NavigationView
et mettre cet auditeur à l'intérieur onCreate ()
de notre activité.
class MainActivity: AppCompatActivity (), NavigationView.OnNavigationItemSelectedListener //… remplace l'amusement onCreate (savedInstanceState: Bundle?) //… val navigationView: NavigationView = findViewById (R.id.nav_view) navigationView.setNavigationItemSel Mentions légales) //…
Exécutez le projet à nouveau!
Lorsque vous cliquez sur certains éléments, un message de pain grillé s'affiche - exactement ce à quoi nous nous attendions. Mais rappelez-vous que cliquer sur un élément devrait amener l'utilisateur à une nouvelle activité ou fragment (nous l'ignorons ici par souci de brièveté).
Vous remarquerez que lorsque vous cliquez sur un élément, le tiroir reste toujours. Il serait préférable qu’il ferme automatiquement à chaque fois qu’un élément est cliqué. Voyons comment faire ça.
Remplacez l'amusement onNavigationItemSelected (item: MenuItem): Boolean when (item.itemId) R.id.nav_item_one -> Toast.makeText (this, "Le premier élément choisi", Toast.LENGTH_SHORT).> -> Toast.makeText (this, "élément cliqué deux", Toast.LENGTH_SHORT) .show () R.id.nav_item_three -> Toast.makeText (cet élément "Clicked élément trois", Toast.LENGTH_SHORT).. .id.nav_item_four -> Toast.makeText (this, "Le quatrième élément sélectionné", Toast.LENGTH_SHORT) .show () tray.closeDrawer (GravityCompat.START) return true
Pour fermer le tiroir après avoir cliqué sur un lien, appelez simplement closeDrawer ()
sur une instance de DrawerLayout
et passe GravityCompat.START
à la méthode.
Exécuter le projet une fois de plus et voir le résultat!
Lorsque le tiroir est ouvert, il serait plus agréable pour l'utilisateur de ne pas fermer l'activité à domicile si le Retour bouton est enfoncé. C’est ainsi que fonctionnent les applications populaires telles que les applications de la boîte de réception de Google..
Ainsi, lorsque le tiroir est ouvert et que le Retour Lorsque vous appuyez sur le bouton, fermez uniquement le tiroir au lieu de l’activité à la maison actuelle. Ensuite, si l'utilisateur appuie sur la touche Retour bouton à nouveau, l'activité à la maison doit être fermée.
Voici comment nous pouvons y parvenir:
remplacez fun onBackPressed () if (tiroir.isDrawerOpen (GravityCompat.START)) tiroir.closeDrawer (GravityCompat.START) autre super.onBackPressed ()
Exécutez à nouveau le projet et testez-le.!
Maintenant que vous connaissez les API nécessaires à la création d'un tiroir de navigation, je vais vous montrer un raccourci qui accélérera la prochaine fois. Vous pouvez simplement utiliser un modèle au lieu de coder un tiroir de navigation.
Android Studio fournit des modèles de code conformes aux meilleures pratiques de conception et de développement d'Android. Ces modèles de code existants (disponibles en Java et Kotlin) peuvent vous aider à démarrer rapidement votre projet. Un tel modèle peut être utilisé pour créer une activité de tiroir de navigation..
Je vais vous montrer comment utiliser cette fonctionnalité pratique dans Android Studio..
Pour un nouveau projet, lancez Android Studio.
Entrez le nom de l'application et cliquez sur le bouton Suivant bouton.
Vous pouvez laisser les valeurs par défaut telles qu’elles sont dans Périphériques Android cibles dialogue. Clique le Suivant bouton à nouveau.
dans le Ajouter une activité sur mobile dialogue, faites défiler et sélectionnez Activité du tiroir de navigation. Clique le Suivant bouton après ça.
Dans la dernière boîte de dialogue, vous pouvez renommer le nom de l'activité, le nom de la mise en page ou le titre si vous le souhaitez. Enfin, cliquez sur le terminer bouton pour accepter toutes les configurations.
Android Studio nous a maintenant aidés à créer un projet avec une activité de tiroir de navigation. Vraiment cool!
Il est fortement conseillé d'explorer le code généré.
Vous pouvez également utiliser des modèles pour un projet Android Studio déjà existant. Il suffit d'aller à Fichier> Nouveau> Activité> Activité du tiroir de navigation.
Les modèles fournis avec Android Studio conviennent à la mise en page simple et à la création d'applications de base, mais si vous souhaitez donner un coup de pouce supplémentaire à votre application, vous pouvez envisager certains modèles disponibles sur Envato Market..
Ils permettent aux développeurs expérimentés de gagner beaucoup de temps en les aidant à réduire le coût de la création d'application à partir de zéro et en concentrant leurs talents sur les éléments uniques et personnalisés de la création d'une nouvelle application..
Dans ce didacticiel, vous avez appris à créer un tiroir de navigation sous Android à l'aide du logiciel DrawerLayout
et NavigationView
API à partir de zéro. Nous avons également exploré comment utiliser facilement et rapidement les modèles Android Studio pour créer un tiroir de navigation..
Je recommande vivement de consulter les directives officielles de conception des supports de navigation pour savoir comment concevoir et utiliser correctement les tiroirs de navigation sous Android..
Pour en savoir plus sur le codage pour Android, consultez certains de nos autres cours et tutoriels ici sur Envato Tuts.+!