如何在材料导航抽屉中添加checkbox?

我使用菜单项图标菜单,但我想在所有菜单项中添加checkbox。 这是我的drawer_menu.xml

               

有图标和文字。 我还想添加所有这些checkbox。

 [icon] [some text] [checkbox] 

喜欢这个。

我在代码上使用了材质导航抽屉

这是我的nav_header.xml

        

最后这是我的activity_main.xml

             

使用app:actionLayout你可以创造奇迹。

这是一个在没有任何Java代码的抽屉中实现自定义小部件的示例:

    

在此处输入图像描述

menu/widgets.xml

               

所有布局(每个都是一个文件)

                 

连接代码

您可以像访问任何其他菜单一样访问它:

 //  NavigationView nav = (NavigationView)findViewById(R.id.navigation_view); MenuItem switchItem = nav.getMenu().findItem(R.id.switch); CompoundButton switchView = (CompoundButton)MenuItemCompat.getActionView(switchItem); switchView.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } }); 

TWiStErRob代码的替代解决方案是使用actionViewClass

   

所以你不需要创建布局文件。 当然,对于Switch的情况,它应该是API 14+的菜单

经过长时间的研究,我决定使用定制滑动抽屉。 我解决了我的问题也许你可以用我的方式。所以我现在有checkbox。

首先我定义了drawer_list_item.xml

       

现在我们有图标,文字和可爱的checkbox。

之后我在activity_main.xml中添加listview

       

我把ListView放在这里。 最后,我在MainActivity.java中的onCreate中以编程方式定义了代码

  mTitle = mDrawerTitle = getTitle(); navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); navMenuIcons = getResources(). obtainTypedArray(R.array.nav_drawer_icons); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.list_slidermenu); navDrawerItems = new ArrayList(); navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1))); navMenuIcons.recycle(); adapter = new NavDrawerListAdapter(getApplicationContext(), navDrawerItems); mDrawerList.setAdapter(adapter); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.app_name, ){ public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_settings).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState);. mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } 

而你也有用

我在string.xml中使用图标和文本,你必须为文本定义字符串数组,为图标定义数组。 我按照本教程的代码进行此代码非常有用,您可以在http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/find更多详细信息。

我希望这个解决方案很有用。