J'ai une DrawerLayout
contenant une NavigationView
et cette activité de mise en page sert de tiroir de navigation commun pour toutes les activités de mon application. Je fournis la ressource de menu pour app:menu
dans la vue de navigation. J'ai quelques éléments de menu, mais je souhaite qu'un élément de menu soit pliable/extensible. Ainsi, lorsque je clique dessus, il s'agrandit pour afficher deux sous-menus et se réduit à nouveau lors d'un deuxième clic.
J'ai ajouté des sous-menus en ajoutant un autre <menu>
à l'intérieur du <item>
, mais je ne peux pas le rendre pliable/extensible.
De plus, je ne veux pas utiliser ExpandableListView
pour mes besoins. Au lieu de cela, je dois juste faire quelques ajustements dans le fichier de ressources de menu. S'il vous plaît, dirigez-moi dans la bonne direction. J'ai cherché dans Google uniquement pour trouver du code, des blogs et des exemples d'éléments de liste réductibles à l'aide de ExpandableListView
, mais j'ai besoin que cela fonctionne avec le widget de conception NavigationView
de la bibliothèque d'aide à la conception.
Voici mon code pour le fichier de menu:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_aboutus"
Android:title="About Us" />
<item
Android:id="@+id/nav_faq"
Android:title="FAQs" />
<item
Android:id="@+id/nav_share"
Android:title="Share" />
<item
Android:id="@+id/nav_myaccount"
Android:title="My Account" />
<item
Android:id="@+id/nav_legal"
Android:title="Legal" >
<menu>
<item
Android:id="@+id/nav_tnc"
Android:title="Terms and Conditions" />
<item
Android:id="@+id/nav_pp"
Android:title="Privacy Policy" />
</group>
</menu>
</item>
</menu>
Je souhaite que l’élément de menu Légal soit extensible avec deux éléments de sous-menu "Conditions générales", "Politique de confidentialité".
Vous pouvez utiliser des vues de liste extensibles dans les tiroirs de navigation. Je ne comprends pas pourquoi vous ne souhaitez pas les utiliser. Pour plus d'informations à ce sujet, cliquez ici http://developer.Android.com/reference/Android/widget/ExpandableListView.html
Si vous insistez pour ne pas utiliser expandableListView, vous pouvez également concevoir l'extension vous-même à l'aide de l'option OnSelect du menu pour cet élément spécifique. Bien que je ne sache pas vraiment pourquoi vous voulez cela, vous ne feriez que ré-installer la roue.
il existe un truc pour faire cela sans utiliser ExpandableListView.Ajoutez ces éléments de menu normalement dans le fichier de présentation de menu et masquez-les/affichez-les en cliquant sur l'élément de menu sous lequel vous souhaitez les afficher comme ceci:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
NavigationView nv= (NavigationView) findViewById(R.id.nav_view);
Menu m=nv.getMenu();
int id = item.getItemId();
if (id == R.id.nav_posts) {
boolean b=!m.findItem(R.id.nav_class).isVisible();
//setting submenus visible state
m.findItem(R.id.nav_class).setVisible(b);
m.findItem(R.id.nav_dept).setVisible(b);
m.findItem(R.id.nav_batch).setVisible(b);
m.findItem(R.id.nav_campus).setVisible(b);
return true;
} else if (id == R.id.nav_walls) {
boolean b=!m.findItem(R.id.nav_wall_events).isVisible();
//setting submenus visible state
m.findItem(R.id.nav_wall_events).setVisible(b);
m.findItem(R.id.nav_wall_fun).setVisible(b);
m.findItem(R.id.nav_wall_hadith).setVisible(b);
m.findItem(R.id.nav_wall_news).setVisible(b);
m.findItem(R.id.nav_wall_Poetry).setVisible(b);
return true;
} else if (id == R.id.nav_com) {
m.findItem(R.id.nav_share).setVisible(false);
m.findItem(R.id.nav_send).setVisible(false);
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
où le fichier de disposition de menu est:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_posts"
Android:icon="@drawable/ic_menu_camera"
Android:title="Posts" />
<item
Android:id="@+id/nav_class"
Android:title="Class"
Android:visible="false" />
<item
Android:id="@+id/nav_dept"
Android:title="Department"
Android:visible="false" />
<item
Android:id="@+id/nav_batch"
Android:title="Batch"
Android:visible="false" />
<item
Android:id="@+id/nav_campus"
Android:title="Campus"
Android:visible="false" />
<item
Android:id="@+id/nav_walls"
Android:icon="@drawable/ic_menu_gallery"
Android:title="Walls" />
<item
Android:id="@+id/nav_wall_news"
Android:title="News"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_events"
Android:title="Events"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_fun"
Android:title="Fun"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_hadith"
Android:title="Hadith"
Android:visible="false" />
<item
Android:id="@+id/nav_wall_Poetry"
Android:title="Poetry"
Android:visible="false" />
</group>
<item
Android:id="@+id/nav_com"
Android:title="Communicate">
<menu>
<item
Android:id="@+id/nav_share"
Android:icon="@drawable/ic_menu_share"
Android:title="Share" />
<item
Android:id="@+id/nav_send"
Android:icon="@drawable/ic_menu_send"
Android:title="Send" />
</menu>
</item>
</menu>
Dans le fichier de disposition de menu:
<item
Android:title="Setup"
Android:id="@+id/SetupGr"
Android:icon="@drawable/setup"
/>
<group
Android:checkableBehavior="none"
Android:id="@+id/SetupGroup">
<item
Android:id="@+id/setupOutdoor"
Android:icon="@drawable/outdoor"
Android:title="Outdoor" />
<item
Android:id="@+id/setupClocks"
Android:icon="@drawable/ic_launcher"
Android:title="Clocks" />
<item
Android:id="@+id/selectMaps"
Android:icon="@drawable/map"
Android:title="Select map" />
</group>
Dans MyActivity.Java - chargez le menu souhaité:
public void LoadNavMenu(int iMenu){
navigationView.getMenu().clear();
navigationView.inflateMenu(iMenu);
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
}
Et OnNavigationItemSelected:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
switch (item.getItemId()){
case R.id.HelpGr:
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,true);
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
return true;
case R.id.SetupGr:
navigationView.getMenu().setGroupVisible(R.id.SetupGroup,true);
navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
return true;
}
base.closeDrawer(GravityCompat.START);
return true;
}
J'ai 1 élément - Configuration - et lorsque l'utilisateur le sélectionne - je configure le groupe avec id - Groupe d'installation - visible et le retourne sans fermer le tiroir. Sinon, je mets tous les groupes invisibles.