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)?
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:
android:title
et android:icon
atsortingbuts d’ android:icon
sur l’ item
ou non 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:
(Ceci est avec la version 27.1.1 de com.android.support:design
, pas sûr des autres versions.)