Comment puis-je append un élément personnalisé à un NavigationView avec une disposition de menu?

J’ai essayé de simplifier certains codes de tiroirs de navigation en utilisant la nouvelle classe NavigationView dans la bibliothèque du support de conception Android. Cela fonctionne très bien si vous voulez juste des icons à gauche et du texte à droite comme dans l’exemple de la documentation, mais que faire si je veux append une vue personnalisée à la mise en page qui a un android.support.v7.widget.SwitchCompat comme dans l’application Google Play Movies (voir capture d’écran ci-dessous)?

Films Google Play

J’ai essayé d’utiliser l’atsortingbut actionLayout pour spécifier un fichier de mise en page personnalisé comme dans l’exemple de code ci-dessous, mais cet atsortingbut semblait être ignoré car il ne fonctionnait pas.

res/menu/navigation_drawer.xml

           

res/layout/nav_drawer_switch.xml

    

Comment puis-je faire fonctionner ceci? Idéalement, je voudrais append la vue personnalisée tout en utilisant la disposition de mon menu, mais si ce n’est pas possible sans utiliser un hack brutal (comme si vous tapotez sur une mise en page existante générée par la bibliothèque de support), j’aimerais connaître la solution avec le moins de code, et qui rend encore la transition à NavigationView .

L’atsortingbut actionLayout est maintenant pris en charge dans Android Support Library 23.1 :

NavigationView fournit un moyen pratique de créer un tiroir de navigation, y compris la possibilité de créer des éléments de menu à l’aide d’un fichier XML de menu. Nous avons étendu la fonctionnalité possible avec la possibilité de définir des vues personnalisées pour les éléments via app: actionLayout ou en utilisant MenuItemCompat.setActionView ().

Le code dans la question devrait donc fonctionner maintenant.

NavigationView est une sous-classe de FrameLayout , qui peut avoir plusieurs enfants:

Vous pouvez cependant append plusieurs enfants à un FrameLayout et contrôler leur position dans FrameLayout en atsortingbuant une gravité à chaque enfant, en utilisant l’atsortingbut android: layout_gravity.

Cela signifie que vous pouvez append une vue personnalisée à votre NavigationView :

      

créer une mise en page avec switchcompat et la mentionner dans l’élément de menu comme

 ` 

puis notifier la mise en page append ceci

  

onclick est le gestionnaire keyPoint, implémenter dans votre activité, puis il fonctionnera.

Vous pourriez vouloir jeter un oeil à cette bibliothèque: https://github.com/mikepenz/MaterialDrawer . Il facilite l’utilisation du tiroir de navigation et prend en charge les vues personnalisées.

J’ai eu le même problème et j’ai constaté que NavigationView se comporte différemment selon:

  • Si vous définissez l’ android:title et android:icon atsortingbuts d’ android:icon sur l’ item ou non
  • Quel type de vue contient votre disposition d’action (par exemple, TextView ou autres)

Ne pas définir les atsortingbuts utilisés pour personnaliser complètement l’élément:

     

(Notez que vous pouvez également ne pas définir android:title , mais cela se traduit par un avertissement dans Android Studio.)

Le résultat:

vue de navigation avec commutateur en tant que disposition d'action personnalisée

(Ceci est avec la version 27.1.1 de com.android.support:design , pas sûr des autres versions.)