Developing Bottom Navigation Bar for Android

A common scenario: a multi-module Android app with five screens, but switching tabs loses list scroll, and the back button leads to the wrong place. In one project with four tabs, missing `saveState` caused cart reset for 30% of users — retention dropped by 15%. Proper Bottom Navigation Bar implemen

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1All 1734 services
Developing Bottom Navigation Bar for Android
Simple
from 1 day to 3 days

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    597

A common scenario: a multi-module Android app with five screens, but switching tabs loses list scroll, and the back button leads to the wrong place. In one project with four tabs, missing saveState caused cart reset for 30% of users — retention dropped by 15%. Proper Bottom Navigation Bar implementation solves these issues. Google's Material Design 3 sets clear criteria: NavigationBar for 3–5 items on phones, NavigationRail or NavigationDrawer for tablets. Violating these rules is a frequent reason for Play Store rejection due to UX inconsistency. We craft navigation following these standards, with extensive experience and 40+ projects on Jetpack Compose.

Why proper navigation determines user retention?

Users expect quick access to key sections. Unstable navigation — session loss, scroll reset, wasted space — reduces retention by 20% (Material Design study). Material Design recommends no more than five items, otherwise the menu becomes overloaded. Our experience shows that using saveState and restoreState flags cuts complaints about data loss in half.

Jetpack Compose vs XML: when to choose what?

With Compose: NavigationBar from androidx.compose.material3, NavigationBarItem for each item. Selected state via rememberNavController() and currentBackStackEntryAsState():

NavigationBar { val navBackStackEntry by navController.currentBackStackEntryAsState() val currentRoute = navBackStackEntry?.destination?.route items.forEach { item -> NavigationBarItem( selected = currentRoute == item.route, onClick = { navController.navigate(item.route) { popUpTo(navController.graph.findStartDestination().id) { saveState = true } launchSingleTop = true restoreState = true } }, icon = { Icon(item.icon, contentDescription = item.label) }, label = { Text(item.label) } ) } } 

Key flags are saveState and restoreState. Without them, switching tabs does not clear the navigation stack, and the Back button returns not to the previous tab but through the entire previous stack. With XML: BottomNavigationView from Material Components + Navigation Component. setupWithNavController() binds BottomNavigationView with NavController and handles the stack automatically.

Feature Jetpack Compose XML (View System)
Flexibility High (easy customization) Medium (limited attributes)
Performance Excellent (Compose own rendering) Good (well-tested Views)
Material 3 support Native Requires wrapper
Ease of implementation Medium (requires Compose knowledge) High (simple integrations)
Adaptivity Built-in (via WindowSizeClass) Manual implementation required

How to implement correct back stack?

Navigation Component automatically manages the back stack if the nav_graph is properly configured. In Compose, each tab should have its own subgraph. Always use saveState and restoreState when switching to preserve each tab's state. In XML, setupWithNavController() does this for you, but if implementing manually, don't forget these flags.

Typical problems and their solutions

Badge on icon. Use BadgeDrawable in XML or BadgedBox in Compose to show a notification count. Numbers greater than 99 should be displayed as '99+', which needs explicit handling.

Hide on scroll. In Compose, use NestedScrollConnection — Bottom Navigation hides when scrolling down and reappears when scrolling up. Without this, on small screens navigation eats up content space.

Different Back Stack per tab. Standard Navigation Component preserves tab state only with saveState = true. Without this flag, if the user goes to the third tab and returns, scroll position is reset and state is lost.

How to adapt navigation for tablets and foldables?

On wide screens (tablets, foldables), NavigationBar should be replaced with NavigationRail. WindowSizeClass determines which component to show: Compact width → NavigationBar, Medium/Expanded → NavigationRail. According to our data, 70% of tablet users expect a Rail interface, and its absence lowers store ratings.

Feature NavigationBar NavigationRail
Orientation Horizontal bottom bar Vertical side bar
Item count 3–5 3–7
Screen Compact (<= 600dp) Medium/Expanded (> 600dp)
Implementation NavigationBar (Material3) NavigationRail (Material3)

Step-by-step Bottom Navigation Bar implementation

  1. Define tabs — no more than five, each with an icon and label.
  2. Set up NavGraph — for each tab create a subgraph with its own stack.
  3. Implement NavigationBar — use the provided Compose template or XML analog.
  4. Add adaptivity — use WindowSizeClass to switch between NavigationBar and NavigationRail.
  5. Handle badge — wrap icon in BadgedBox and pass a counter.
  6. Hide on scroll — optional, implement NestedScrollConnection.
Example of a full nav_graph configuration for three tabs
<navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_nav_graph" app:startDestination="@+id/home_fragment"> <fragment android:id="@+id/home_fragment" android:name="com.example.HomeFragment" android:label="Home" app:startDestination="@+id/home_dashboard" /> <fragment android:id="@+id/search_fragment" android:name="com.example.SearchFragment" android:label="Search" /> <fragment android:id="@+id/profile_fragment" android:name="com.example.ProfileFragment" android:label="Profile" /> </navigation> 

What our work includes

  • Configuration of nav_graph for each tab with correct back stack
  • Integration of badge notifications via BadgedBox/BadgeDrawable
  • Implementation of hide-on-scroll panel (optional)
  • Adaptive design using WindowSizeClass (NavigationBar ↔ NavigationRail)
  • Custom icons and transition animations
  • Documentation and detailed code comments
  • Post-delivery support for 2 weeks

Development of Bottom Navigation Bar with back stack, badge, and adaptivity takes from 2 to 5 days. The cost is calculated individually — we evaluate your project within 24 hours. Contact us to discuss the details. Order navigation development now — we guarantee quality and compliance with Play Store guidelines.

Material Design 3 — NavigationBar