Android Navigation View 以编程方式设置菜单

Posted

技术标签:

【中文标题】Android Navigation View 以编程方式设置菜单【英文标题】:Android Navigation View set menu programmatically 【发布时间】:2016-01-13 19:09:55 【问题描述】:

在我的应用中,我想根据某些条件传递某些菜单。

这是布局:

 <android.support.design.widget.NavigationView
        android:id="@+id/nav_view_free"
        android:layout_
        android:layout_
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/Color_White"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer_1"
        />

我要做的就是根据某些条件动态更改@menu/activity_main_drawer_1。

如何以编程方式执行此操作?

【问题讨论】:

你想改变整个菜单还是只想改变这个菜单的menuItem..? 我想更改整个菜单 【参考方案1】:

在您的NavigationView 上使用inflateMenu

例如:

navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.menu_view);

更多信息请参见here。

【讨论】:

有必要拨打navigationView.getMenu().clear()吗?谢谢! 否则它会保留以前的项目并附加新菜单【参考方案2】:

navigationView.getMenu().clear(); navigationView.inflateMenu(R.menu.your_menu);

【讨论】:

【参考方案3】:

这应该可行:

val menu = navigationView.menu
val submenu = menu.addSubMenu("New set")

submenu.add("Item1")
submenu.getItem(0).setIcon(R.drawable.item1)
submenu.add("Item2")
submenu.getItem(1).setIcon(R.drawable.item2)
submenu.add("Item3")
submenu.getItem(2).setIcon(R.drawable.item3)
navigationView.invalidate()

希望对你有帮助。

【讨论】:

【参考方案4】: 创建通用类实现菜单接口然后添加菜单项 NavigationView nd=(NavigationView )findViewById(R.id.nav_view_free); 菜单 mn=​​new Menu(); mn.add("电子邮件"); mn.add("电子邮件"); mn.add("电子邮件"); mn.add("电子邮件"); nd(mn);

【讨论】:

这个答案不起作用。您不能实例化菜单(使用构造函数)。您不能在 NavigationView 上设置菜单。

以上是关于Android Navigation View 以编程方式设置菜单的主要内容,如果未能解决你的问题,请参考以下文章

未找到处理 Intent 的活动 act=android.intent.action.VIEW dat=google.navigation:q=17.399986,78.483137 pkg=com

react-navigation 做导航栏,发现 Android 上的标题不居中

react-navigation 启用滑动以返回 android

ABAP webdynpro的view navigation和WebUI的view navigation

Jetpack Navigation 实现自定义 View 导航

在导航菜单中的Android应用程序中创建alertdialog以注销