2015-12-20 14 views
8

vorrei ottenere lo stesso effetto come questo:Come creare un sottolivello nel menu di navigazione in Android?

http://mmenu.frebsite.nl/

quando si fa clic sul documento/tutorial/supporto, il menu andare al menu sottolivello. Non è un listview espandibile, né una voce di sottomenu sotto il titolo del menu genitore.

Ho provato a creare il menu con vista di navigazione come questa:

<?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_home" 
      android:icon="@drawable/ic_event" 
      android:title="Home" /> 
     <item 
      android:id="@+id/nav_profile" 
      android:icon="@drawable/ic_dashboard" 
      android:title="Perfil" /> 
    </group> 

    <item android:title="More Options"> 
     <menu> 
      <item 
       android:icon="@drawable/ic_forum" 
       android:title="Forum" /> 
      <item 
       android:icon="@drawable/ic_headset" 
       android:title="Headset" /> 
     </menu> 
    </item> 
</menu> 

Il problema è che non va al sottolivello quando clicco sul titolo menu principale. Come raggiungerlo in Android? Grazie mille

+0

Hai qualche soluzione, anche io sto provando questo, Se hai fatto, per favore condividilo una volta, Avanzato Grazie per la tua risposta .. –

risposta

7

credo, ho archiviato l'effetto desiderato:

enter image description here

L'idea è dietro a clear() menu esistente e ri- inflateMenu ogni volta che l'utente clicca sulla voce di menu, che dovrebbe portare a un sottomenu. (E su di tornare - fare praticamente lo stesso)

Come un menu principale (activity_main_drawer.xml), ho usato questo:

<?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/action_item1" 
      android:icon="@drawable/ic_menu_camera" 
      android:title="Item 1" /> 
     <item 
      android:id="@+id/action_expand" 
      android:icon="@drawable/ic_menu_gallery" 
      android:title="Sub Menu to expand" /> 
    </group> 
</menu> 

Questo è un sottomenu():

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:title="Go Back" 
     android:icon="@drawable/ic_back" 
     android:id="@+id/back_to_main"/> 

    <item 
     android:id="@+id/sub_item1" 
     android:icon="@drawable/ic_menu_share" 
     android:title="Subitem 1" /> 
    <item 
     android:id="@+id/sub_item2" 
     android:icon="@drawable/ic_menu_send" 
     android:title="Subitem 2" /> 
</menu> 

MainActivity.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" /> 

</android.support.v4.widget.DrawerLayout> 

Ed ecco la MainActivity Classe (che fanno la commutazione):

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    NavigationView navigationView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ..... 
     navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.inflateMenu(R.menu.activity_main_drawer); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    .... 


    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.action_expand) { 
      navigationView.getMenu().clear(); 
      navigationView.inflateMenu(R.menu.activity_submenu_drawer); 
     } else if (id == R.id.back_to_main) { 
      navigationView.getMenu().clear(); 
      navigationView.inflateMenu(R.menu.activity_main_drawer); 
     } 

     return true; 
    } 
} 

ho caricato la mia prova-progetto al mio set - feel free to check it out

Spero, aiuta

+0

Hai qualche soluzione, anche io provando questo, Se hai fatto, per favore condividi una volta , Advanced Grazie per la tua risposta .. –

1

l'idea che ho avuto è stata quella di avere ogni voce di menu aperta con un altro frammento con una transizione. Sotto, il cassetto di navigazione è solo un listview all'interno di un frammento giusto? quindi avvia un altro frammento dall'adattatore dell'elenco dei cassetti navaigation.

0

se devo affrontare questo problema. poi userò il cassetto di navigazione intestazione intera (costume progettato) per l'app. e aggiungere la visualizzazione elenco espandibile o altri motivi animati o altri per cui è il mio requisito reale.

i vantaggi dell'utilizzo di nav personalizzato. è che possiamo impostare il design e la funzionalità di cui abbiamo bisogno. se un semplice elenco di menu, allora l'approccio di battitore è che usa il nav predefinito. cassetto come definito nel supporto di progettazione lib.

Problemi correlati