6

Sto utilizzando il nuovo Android Design Navigation Drawer. Voglio aggiungere un interruttore nel cassetto. C'è una via per implementare questo?Android Design Navigation Drawer - Come aggiungere un interruttore in nav xml?

questo è il xml menù:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group 
     android:id="@+id/nav_view_menu_group_1" 
     android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_view_menu_item_myschedule" 
      android:icon="@drawable/ic_navview_my_schedule" 
      android:title="@string/navview_menu_item_myschedule" 
      android:titleCondensed="@string/navview_menu_item_myschedule" /> 
     <item 
      android:id="@+id/nav_view_menu_item_iolive" 
      android:icon="@drawable/ic_navview_play_circle_fill" 
      android:title="@string/navview_menu_item_iolive" 
      android:titleCondensed="@string/navview_menu_item_iolive" 
      android:visible="false"/> 
     <item 
      android:id="@+id/nav_view_menu_item_explore" 
      android:icon="@drawable/ic_navview_explore" 
      android:title="@string/navview_menu_item_explore" 
      android:titleCondensed="@string/navview_menu_item_explore" /> 
     <item 
      android:id="@+id/nav_view_menu_item_map" 
      android:icon="@drawable/ic_navview_map" 
      android:title="@string/navview_menu_item_map" 
      android:titleCondensed="@string/navview_menu_item_map" 
      android:visible="false"/> 
    </group> 

</menu> 

Come posso cambiare una <item> di essere interruttore:

<Switch 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Switch" 
     android:id="@+id/switch1" 
     android:layout_gravity="center_horizontal" /> 

Attualmente sto usando il layout di default:

<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:menu="@menu/activity_main_drawer" /> 

Proprio come questa immagine sotto Android Notification http://i.stack.imgur.com/M9nD7.png enter image description here

Apprezzo davvero qualsiasi feedback. Grazie.

+0

hai provato il layout personalizzato? – Mohit

+0

Che cosa stai usando ora, DrawerLayout? O altri? – starkshang

+0

Sto usando Joolah

risposta

1

Possiamo farlo dal seguente senso

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    //Get a reference to your item by id 
    MenuItem item = menu.findItem(R.id.menu_pick_color); 

    //Here, you get access to the view of your item, in this case, the layout of the item has a FrameLayout as root view but you can change it to whatever you use 
    FrameLayout rootView = (FrameLayout)item.getActionView(); 

    //Then you access to your control by finding it in the rootView 
    YourControlClass control = (YourControlClass) rootView.findViewById(R.id.control_id); 

    //And from here you can do whatever you want with your control 

    return true; 
} 
3

Un modo che ho trovato per farlo sarebbe quello di utilizzare setActionView sul menuItem si desidera:

mNavigationView.getMenu().findItem(R.id.nav_connect) 
      .setActionView(new Switch(this)); 

    // To set whether switch is on/off use: 
    ((Switch) mNavigationView.getMenu().findItem(R.id.nav_connect).getActionView()).setChecked(true); 

vogliono Probabilmente un click ascoltatore pure per cambiare lo stato dello Switch:

mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 

      switch (menuItem.getItemId()) { 
       case R.id.nav_connect: 
        ((Switch) menuItem.getActionView()).toggle(); 
        return true; 
      } 
     } 
    } 

Non ho provato, ma si Probabilmente potresti usare android:actionLayout="@layout/switch_layout" in xml e puntare a un layout personalizzato che hai creato.

Potrebbe anche provare a utilizzare un ActionProvider che potrebbe offrire un po 'più robustezza. Non ho ancora provato questo metodo.

Problemi correlati