如何在 NavigationView 中获取菜单项?

Posted

技术标签:

【中文标题】如何在 NavigationView 中获取菜单项?【英文标题】:How can I get menu item in NavigationView? 【发布时间】:2015-09-24 18:16:51 【问题描述】:
<android.support.design.widget.NavigationView
    android:id="@+id/drawer_nav"
    android:layout_
    android:layout_
    android:layout_gravity="start"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/menu_drawer"
    />

我正在使用android.support.design.library 进行材料设计。

我想要的是在用户未登录时隐藏一些菜单项。

现在我无法在NavigationView 中获取菜单项。

我试过了:

MenuItem logoutItem = (MenuItem) mNavigationView.findViewById(R.id.menu_logout);
logoutItem.setVisible(false);

但它不起作用。

我该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:
View navHeader=navigationView.getHeaderView(0);[![enter image description here][1]][1]

navMenu=navigationView.getMenu();

    列表项

    //work for login and logout menu
    if (MyPreferences.getBoolean(BaseActivity.this,ConstantValues.KEY_IS_LOGIN))
        navMenu.getItem(0).setVisible(false);
        navMenu.getItem(9).setVisible(true);
    else 
        navMenu.getItem(0).setVisible(true);
        navMenu.getItem(9).setVisible(false);
    
    

【讨论】:

【参考方案2】:

你可以通过

navigationView.Menu.GetItem(menu_index)

【讨论】:

【参考方案3】:

您可以通过 NavigationView.getMenu()

的方法获取
Menu menuNav = mNavigationView.getMenu();

然后你可以通过

找到具体的项目
MenuItem logoutItem = menuNav.findItem(R.id.menu_logout);

见Official documentation for NavigationView

【讨论】:

你是我的英雄【参考方案4】:

我认为你应该先得到这样的菜单:

navigationView.getMenu().findItem(R.id.login).setVisible(false);

此代码的主要方面是调用 navigationView.getMenu() 从中获取菜单,您将获得当前膨胀菜单的引用并调用 findViewById(),然后您可以随心所欲。

对于项目组 ex:-

<group
android:id="@+id/group_1"
android:checkableBehavior="single"
android:visible="false">
...

然后你可以使用 :-

来控制它
navigationView.getMenu().setGroupVisible(R.id.group_1, true)

【讨论】:

【参考方案5】:

就用下面的方式

nav_draw = (NavigationView) findViewById(R.id.nav_draw);
nav_draw.getMenu().findItem(R.id.navigation_item_1).setVisible(false);

【讨论】:

以上是关于如何在 NavigationView 中获取菜单项?的主要内容,如果未能解决你的问题,请参考以下文章

更改 navigationView 的单个特定菜单项的背景颜色

Android支持:设计NavigationView勾选菜单子项

更改导航抽屉中菜单项的文本颜色

如何在 NavigationView 底部绘制菜单?

java 通过使用app:actionLayout或MenuItemCompat.setActionView()能够为抽屉的菜单项添加自定义视图,这使得NavigationView得到了更好的扩展性.

xml 通过使用app:actionLayout或MenuItemCompat.setActionView()能够为抽屉的菜单项添加自定义视图,这使得NavigationView得到了更好的扩展性..