6

私は新しいAndroid Design Navigation Drawerを使用しています。私は引き出しにスイッチを追加したい。これを実装する場所はありますか?Android Design Navigation Drawer - nav xmlでスイッチを追加するには?

これはメニューxmlです:

<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> 

は、私がスイッチする1 <item>を変更するにはどうすればよい:

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

私は現在、デフォルトのレイアウトを使用しています:

<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" /> 

Android通知の下にこの画像があります。http://i.stack.imgur.com/M9nD7.png enter image description here

本当に感謝しています。ありがとうございました。

+0

カスタムレイアウトを試しましたか? – Mohit

+0

現在、DrawerLayout?などを使っていますか? – starkshang

+0

私はを使用しています。 – Joolah

答えて

1

私たちは、私がこれを行うのを発見した

@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

一つの方法は、あなたが望むのmenuItemにsetActionViewを用いることであろう以下の方法でそれを行うことができます。

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); 

はおそらくクリックリスナーをしたいです同様にスイッチの状態を変更する:

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; 
      } 
     } 
    } 

私は試していないが、ヨおそらくandroid:actionLayout="@layout/switch_layout"をxmlに使用し、作成したカスタムレイアウトをポイントすることができます。

もう少し頑強になるかもしれないActionProviderを試してみることもできます。私はこの方法を試していません。

関連する問題