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

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

这是布局:

 <android.support.design.widget.NavigationView
        android:id="@+id/nav_view_free"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        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..?
  • 我想更改整个菜单

标签: android view menu navigation


【解决方案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 上设置菜单。
      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多