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