以编程方式展开底部导航视图菜单

28

底部导航视图已添加到设计支持库的25版本中。我尝试过,现在使用起来更加容易了。

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

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

根据文档:

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

尝试使用此inflateMenu(int resID)方法进行编程时,导航视图会抛出“找不到资源”异常。

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_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <FrameLayout
        android:id="@+id/main_fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/bottom_navigation" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        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_classroom"
        android:enabled="true"
        android:icon="@drawable/ic_nav_bar_classroom_24px"
        android:title="@string/nav_bar_item_classrooms"
        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);

发布你的代码和布局。 - Manoj Perumarath
2个回答

51
navigationView.getMenu().clear(); //clear old inflated items.
navigationView.inflateMenu(R.menu.new_navigation_drawer_items);

来自这个答案


它运行得非常好!使用它不会出现空间问题。谢谢! - Spettacolo83
非常感谢!这让我省去了使用多个BottomNavigationViews的麻烦,否则会引起其他问题。 - Erlend K.H.

34
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);

希望能对你有所帮助。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接