以编程方式膨胀底部导航视图菜单

Posted

技术标签:

【中文标题】以编程方式膨胀底部导航视图菜单【英文标题】:Inflate Bottom Navigation View menu programmatically 【发布时间】:2017-08-22 09:14:01 【问题描述】:

底部导航视图已添加到设计支持库的版本 25。试过了,现在用起来方便多了。

但是根据我的应用要求,我在实施它时遇到了问题。 我想动态扩展菜单资源并以编程方式更改底部导航视图的菜单项/标题。

inflateMenu(int menuResource) — 使用菜单资源标识符为底部导航视图膨胀菜单。

根据文档:

inflateMenu: void inflateMenu (int resId) 将菜单资源膨胀到此导航视图中。 菜单中的现有项目不会被修改或删除。 参数 resId int:要膨胀的菜单资源的 ID

尝试以编程方式对导航视图使用此 inflateMenu(int resID) 方法会引发异常“Resource not found

bottomNavigationView.inflateMenu(R.menu.bottom_navigation_menu);

是否可以在没有任何第三方库的情况下实现它?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <FrameLayout
        android:id="@+id/main_fragment_container"
        android:layout_
        android:layout_
        android:layout_above="@+id/bottom_navigation" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        app:itemBackground="@color/theme_action_bar_bg"
        app:itemIconTint="@color/white"
        app:itemTextColor="@color/white" />
</RelativeLayout>

菜单资源:

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/nav_bar_item_dashboard"
        android:enabled="true"
        android:icon="@drawable/ic_nav_bar_dashboard_24px"
        android:title="@string/nav_bar_item_dashboard"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/nav_bar_item_people"
        android:enabled="true"
        android:icon="@drawable/ic_nav_bar_people_24px"
        android:title="@string/nav_bar_item_people"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/nav_bar_item_clas-s-room"
        android:enabled="true"
        android:icon="@drawable/ic_nav_bar_clas-s-room_24px"
        android:title="@string/nav_bar_item_clas-s-rooms"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/nav_bar_item_manage"
        android:enabled="true"
        android:icon="@drawable/ic_nav_bar_manage_24px"
        android:title="@string/nav_bar_item_manage"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/nav_bar_item_more"
        android:enabled="true"
        android:icon="@drawable/ic_nav_bar_more_24px"
        android:title="@string/nav_bar_item_more"
        app:showAsAction="ifRoom" />
</menu>

在菜单资源中以编程方式为 Activity 内的底部导航视图充气:

navBar = (BottomNavigationView) findViewById(R.id.bottom_navigation);
    navBar.inflateMenu(R.menu.bottom_navigation_view);

【问题讨论】:

发布您的代码和布局 【参考方案1】:
navigationView.getMenu().clear(); //clear old inflated items.
navigationView.inflateMenu(R.menu.new_navigation_drawer_items);

来自this answer

【讨论】:

它就像一个魅力!没有空间问题。谢谢! 非常感谢!省去了我使用多个BottomNavigationViews的麻烦,这会引起其他麻烦。【参考方案2】:
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

//Add MenuItem with icon to Menu
navigation.getMenu().add(Menu.NONE, 1, Menu.NONE, "Home").setIcon(R.drawable.ic_home_black_24dp);

希望对你有帮助。

【讨论】:

我们可以使用navigation.getMenu().clear();在添加新项目之前清除菜单; 如果我想提供一个自定义视图作为菜单项,我该怎么做?

以上是关于以编程方式膨胀底部导航视图菜单的主要内容,如果未能解决你的问题,请参考以下文章

每个底部导航视图菜单项的单独导航图 - Android

如何禁用底部导航视图的菜单项?

如何在动态渲染底部导航视图时删除动画?

如何强制显示移动 Safari 底部导航栏以编程方式显示?

带有底部工具栏的 UI 导航控制器在视图切换时丢失 UIBarButtonItem

如何以编程方式在导航栏正下方添加视图?