Bottom Navigation View has been added to version 25 of the Design Support Library. Tried and it's much easier to use now.
But I am facing problem implementing it as per my app requirements. I want to inflate menu resource dynamically and change menu items/titles of the Bottom Navigation view programmatically.
inflateMenu(int menuResource) — Inflate a menu for the bottom navigation view using a menu resource identifier.
According to docs:
inflateMenu: void inflateMenu (int resId) Inflate a menu resource into this navigation view. Existing items in the menu will not be modified or removed. Parameters resId int: ID of a menu resource to inflate
Trying to use this inflateMenu(int resID) method programmatically with navigation view throws exception "Resource not found"
bottomNavigationView.inflateMenu(R.menu.bottom_navigation_menu);
Is it possible to achieve it without any third party libraries?
<?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>
Menu Resource:
<?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>
Inflating Programmatically in menuresource for Bottom Navigation view inside Activity:
navBar = (BottomNavigationView) findViewById(R.id.bottom_navigation); navBar.inflateMenu(R.menu.bottom_navigation_view);
com.google.android.material.bottomnavigation.BottomNavigationView. Represents a standard bottom navigation bar for application. It is an implementation of material design bottom navigation. Bottom navigation bars make it easy for users to explore and switch between top-level views in a single tap.
BottomNavigationView makes it easy for users to explore and switch between top-level views with a single tap. There should be a minimum of 3 top-level views and a maximum of 5. If Destinations are more than 5 then use the Navigation Drawer. When the user taps on the icon it will change the top-level view accordingly.
navigationView.getMenu().clear(); //clear old inflated items. navigationView.inflateMenu(R.menu.new_navigation_drawer_items);
from this answer
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With