# bottom-navigation

Published articles for bottom-navigation.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Beyond Font Scaling: Large Content Viewer with Compose

DevFeed: [Beyond Font Scaling: Large Content Viewer with Compose](<https://devfeed.tech/articles/beyond-font-scaling-large-content-viewer-with-compose-38518.md>)

Original publisher: [Read original article](<https://eevis.codes/blog/2026-01-17/beyond-font-scaling-large-content-viewer-with-compose/>)

Author: Eevis Panula

Published: 2026-02-28T04:24:34.139000Z

Content type: tutorial

Language: en

Sources: [Eevis Blog](<https://devfeed.tech/sources/eevis-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Accessibility](<https://devfeed.tech/topics/accessibility.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Web Content Accessibility Guidelines](<https://devfeed.tech/topics/web-content-accessibility-guidelines.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [accessibility-guidelines](<https://devfeed.tech/tags/accessibility-guidelines.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [compose](<https://devfeed.tech/tags/compose.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [wcag](<https://devfeed.tech/tags/wcag.md>), [web-content-accessibility-guidelines](<https://devfeed.tech/tags/web-content-accessibility-guidelines.md>)

### AI overview

This tutorial explains how to build a Large Content Viewer-like item previewer with Compose for bottom navigation items whose text cannot be adequately enlarged through font scaling. It describes the iOS accessibility pattern and discusses WCAG text-resizing considerations and the limitation that the proposed interaction relies on long press.

### Source excerpt

If you've worked with accessibility issues and have a bottom bar with multiple items, you've probably come across a problem with larger font sizes, where it's impossible to scale the bottom navigation bar texts properly with larger font sizes. You might have wondered whether there are any alternative ways to support larger font sizes beyond just, well, font scaling. That's what happened to me. There was a bottom bar with five items with long texts. The developer who implemented the bottom bar had restricted font scaling because larger font sizes made the bottom bar's items essentially unreadable. I started investigating options and came across one solution: a large content viewer from iOS. As Compose doesn't support this out of the box, I had to build it. This blog post explains what a Large Content Viewer is and how to build similar functionality with Compose. I call it the item previewer in this blog post. But before diving into that, let's discuss the large content viewer on iOS. Large Content Viewer on iOS Large content viewer is an accessibility tool for iOS that helps, for example, low-vision users display non-scaling elements, such as bottom-bar items, as previews with a larger font size. It's enabled only when the Large text (an accessibility setting) is enabled. Here's an example of what it looks like on the Files app: Accessibility Considerations There are accessibility considerations for this solution. First of all, yes, it can be WCAG-compliant. WCAG, which stands for Web Content Accessibility Guidelines, is the standard used, for example, in legislation. It applies to mobile apps as well. It states in success criteria 1.1.4 Resize text that Except for captions and images of text, text can be resized without assistive technology up to 200 percent without loss of content or functionality. If the mechanism is not the default font size setting, then another supported mechanism would suffice to pass the success criteria. With this solution, users can resize

## Glassmorphic Bottom Navigation in Jetpack Compose

DevFeed: [Glassmorphic Bottom Navigation in Jetpack Compose](<https://devfeed.tech/articles/glassmorphic-bottom-navigation-in-jetpack-compose-25781.md>)

Original publisher: [Read original article](<https://www.sinasamaki.com/glassmorphic-bottom-navigation-in-jetpack-compose/>)

Author: sinasamaki

Published: 2023-12-15T05:11:33Z

Content type: tutorial

Language: en

Sources: [sinasamaki](<https://devfeed.tech/sources/sinasamaki.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [article](<https://devfeed.tech/tags/article.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [compose](<https://devfeed.tech/tags/compose.md>), [implement](<https://devfeed.tech/tags/implement.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [library](<https://devfeed.tech/tags/library.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [scale](<https://devfeed.tech/tags/scale.md>), [state](<https://devfeed.tech/tags/state.md>), [switching](<https://devfeed.tech/tags/switching.md>)

### AI overview

A tutorial on building a glassmorphic bottom navigation bar in Jetpack Compose using the Haze library. It covers layout setup, tab state, animated selection, and backdrop blurring with rounded boundaries.

### Source excerpt

Implement a frosty bottom bar using Haze library

## Show BottomBar conditionally in Compose

DevFeed: [Show BottomBar conditionally in Compose](<https://devfeed.tech/articles/show-bottombar-conditionally-in-compose-22663.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/should-show-bottombar-conditionally-in-jetpack-compose>)

Author: James Shvarts

Published: 2022-11-08T21:38:12Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [class](<https://devfeed.tech/tags/class.md>), [compose](<https://devfeed.tech/tags/compose.md>), [icons](<https://devfeed.tech/tags/icons.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [route](<https://devfeed.tech/tags/route.md>), [screen](<https://devfeed.tech/tags/screen.md>)

### AI overview

A tutorial on conditionally showing or hiding a bottom navigation bar in Jetpack Compose based on the current navigation route. It uses a custom AppState class, separate navigation graphs for tabs, and a detail-screen navigation example.

### Source excerpt

Conditionally show BottomBar with bottom navigation in Jetpack Compose

## Bottom Navigation Animation in Jetpack Compose

DevFeed: [Bottom Navigation Animation in Jetpack Compose](<https://devfeed.tech/articles/bottom-navigation-animation-in-jetpack-compose-25767.md>)

Original publisher: [Read original article](<https://www.sinasamaki.com/bottom-navigation-animation-in-jetpack-compose/>)

Author: sinasamaki

Published: 2022-02-21T00:00:00Z

Content type: tutorial

Language: en

Sources: [sinasamaki](<https://devfeed.tech/sources/sinasamaki.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [class](<https://devfeed.tech/tags/class.md>), [code](<https://devfeed.tech/tags/code.md>), [color](<https://devfeed.tech/tags/color.md>), [components](<https://devfeed.tech/tags/components.md>), [compose](<https://devfeed.tech/tags/compose.md>), [icons](<https://devfeed.tech/tags/icons.md>), [implement](<https://devfeed.tech/tags/implement.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [screen](<https://devfeed.tech/tags/screen.md>), [sealed-class](<https://devfeed.tech/tags/sealed-class.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A tutorial on building a custom animated bottom navigation interface in Jetpack Compose. It starts with a functional navigation UI and then adds animations for item weight, size, height, shadows, corners, opacity, and title visibility using Compose animation components.

### Source excerpt

Bottom navigation UI is used to navigate between different top level screens in apps. There is a composable available in the compose libraries, but it could be improved with some more animations. Using only the animation components provided in the jetpack compose libraries, we could implement a more custom bottom

## Creating a BottomNavigation Multi-Stack using Child Fragments with Jetpack Navigation

DevFeed: [Creating a BottomNavigation Multi-Stack using Child Fragments with Jetpack Navigation](<https://devfeed.tech/articles/creating-a-bottomnavigation-multi-stack-using-child-fragments-with-jetpack-navigation-25934.md>)

Original publisher: [Read original article](<https://zhuinden.medium.com/creating-a-bottomnavigation-multi-stack-using-child-fragments-with-jetpack-navigation-5d4c24ea6f4f?source=rss-7a8d96da8cb6------2>)

Author: Gabor Varadi

Published: 2021-02-26T06:14:32Z

Content type: tutorial

Language: en

Sources: [Stories by Gabor Varadi on Medium](<https://devfeed.tech/sources/stories-by-gabor-varadi-on-medium.md>)

Topics: [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-navigation](<https://devfeed.tech/tags/jetpack-navigation.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [navigation-component](<https://devfeed.tech/tags/navigation-component.md>), [screen](<https://devfeed.tech/tags/screen.md>), [state](<https://devfeed.tech/tags/state.md>)

### AI overview

This tutorial explains how to implement bottom navigation with a separate Jetpack Navigation NavController and back stack for each tab. It uses child fragments, adding all tab fragments while detaching those that are not visible, and initializes each tab with its own navigation graph.

### Source excerpt

It's been a recurring question, regardless of navigation framework of choice: how is it possible to create a screen with a bottom navigation view, that would host a navigation history stack per each tab? Each framework has its own unique ways. For example, with Jetpack Navigation you might use the NavigationExtensions, which requires you to host the BottomNavigationView at the Activity-level. But how would you do it with Jetpack Navigation, in such a way that the BottomNavigationView is confined to a single child fragment, and that child fragment would host all tabs that each have a NavController (backstack) available to them? How bottom navigation with child fragments normally works If you intend to create a BottomNavigationView that is hosted by a Fragment (and that Fragment hosts each tab as a child fragment), there's a bit of work needed to be done. To keep the fragments alive while switching between them, they must all be added. However, to make sure that the fragments are in the correct lifecycle (stopped while not showing), it makes sense to detach them (and attach the one that is meant to be showing). https://medium.com/media/82eb957284cfe5def31160ac33d277ba/href This example is also available here. Please note that there is nothing specific to Jetpack Navigation in this snippet, this is how a fragment can manage its child fragments and keep only one of them attached, while the rest are detached. We will use this knowledge later in the article. What Jetpack Navigation normally does When you use Jetpack Navigation (using its XML-based DSL) you typically create a navigation.xml (typically 1 per compilation module, but multiple nav graphs + include can be used too), which is then given to a NavHostFragment in a FragmentContainerView. This is what allows the NavController to be initialized with a graph, and save/restore its state. https://medium.com/media/4cc60fc3c96786f7f9adcbb3a1053853/hrefCreating a NavController and backstack for each bottom navigation tab T

## Creating a BottomNavigation Multi-Stack using child Fragments with Simple-Stack

DevFeed: [Creating a BottomNavigation Multi-Stack using child Fragments with Simple-Stack](<https://devfeed.tech/articles/creating-a-bottomnavigation-multi-stack-using-child-fragments-with-simple-stack-25935.md>)

Original publisher: [Read original article](<https://zhuinden.medium.com/creating-a-bottomnavigation-multi-stack-using-child-fragments-with-simple-stack-c73c1ca3bbd4?source=rss-7a8d96da8cb6------2>)

Author: Gabor Varadi

Published: 2021-01-25T17:03:22Z

Content type: tutorial

Language: en

Sources: [Stories by Gabor Varadi on Medium](<https://devfeed.tech/sources/stories-by-gabor-varadi-on-medium.md>)

Topics: [navigation](<https://devfeed.tech/topics/navigation.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-navigation](<https://devfeed.tech/tags/jetpack-navigation.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [simple-stack](<https://devfeed.tech/tags/simple-stack.md>)

### AI overview

A tutorial on implementing bottom navigation with a separate navigation history stack for each tab using child fragments and Simple-Stack. It explains fragment attachment and detachment, lifecycle management, and keeping back stacks alive across configuration changes.

### Source excerpt

It's been a recurring question, regardless of navigation framework of choice: how is it possible to create a screen with a bottom navigation view, that would host a navigation history stack per each tab? Each framework has its own unique ways. For example, Jetpack Navigation provides NavigationExtensions as a sample, there's FragNav, but how would you do it with Simple-Stack? How bottom navigation with child fragments normally works If you intend to create a BottomNavigationView that is hosted by a Fragment (and that Fragment hosts each tab as a child fragment), there's a bit of work needed to be done. To keep the fragments alive while switching between them, they must all be added. However, to make sure that the fragments are in the correct lifecycle (stopped while not showing), it makes sense to detach them (and attach the one that is meant to be showing). https://medium.com/media/1667d9733c198c3ae611fd45504f6bd0/href This example is also available here. Please note that there is nothing specific to Simple-Stack in this snippet, this is how a fragment can manage its child fragments and keep only one of them attached, while the rest are detached. In fact, the NavigationAdvancedSample works the same way. We will use this knowledge later in the article. What Simple-Stack normally does When you use Simple-Stack, you typically install a Navigator using Navigator.install(). This allows a single global Backstack instance to be accessible through the Activity's context (and thus making it available to all views within the Activity), and provides automatic lifecycle management to ensure that navigation is handled correctly. https://medium.com/media/03bde713eca4e7ef47d7dae31f6e095d/href This is important to know, because if we want to create a Backstack for each Fragment within our BottomNavigationView, we must manage the lifecycle (and keep the Backstack instance alive across configuration changes) ourselves. Thankfully, this is actually quite simple to do! After all, frag

## An update to the FragmentViewBindingDelegate: the bug we've inherited from AutoClearedValue

DevFeed: [An update to the FragmentViewBindingDelegate: the bug we've inherited from AutoClearedValue](<https://devfeed.tech/articles/an-update-to-the-fragmentviewbindingdelegate-the-bug-we-ve-inherited-from-autoclearedvalue-25927.md>)

Original publisher: [Read original article](<https://itnext.io/an-update-to-the-fragmentviewbindingdelegate-the-bug-weve-inherited-from-autoclearedvalue-7fc0a89fcae1?source=rss-7a8d96da8cb6------2>)

Author: Gabor Varadi

Published: 2021-01-24T00:40:53Z

Content type: article

Language: en

Sources: [Stories by Gabor Varadi on Medium](<https://devfeed.tech/sources/stories-by-gabor-varadi-on-medium.md>)

Topics: [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [bug](<https://devfeed.tech/topics/bug.md>), [navigation](<https://devfeed.tech/topics/navigation.md>)

Tags: [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-view-binding](<https://devfeed.tech/tags/android-view-binding.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [bug](<https://devfeed.tech/tags/bug.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-lifecycle](<https://devfeed.tech/tags/jetpack-lifecycle.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [navigation](<https://devfeed.tech/tags/navigation.md>)

### AI overview

The article identifies a bug in an AutoClearedValue-based FragmentViewBindingDelegate. A fragment can move directly from view creation to view destruction without becoming active, so the observer never runs and the binding is not cleared. The proposed fix is to observe the view lifecycle without using the fragment as the lifecycle owner.

### Source excerpt

Jetpack Lifecycle is quite powerful. We can extract logic, and make it lifecycle-aware. In fact, this allowed us in a previous article to simplify viewbinding and make it a single line. However, I need to provide a quick heads-up: all is not as it seems. The provided gists and code snippets assumed that the code in AutoClearedValue is always correct. In this article, I'll show you how to break it. The original sourcehttps://medium.com/media/74ef2eaf8bac6a656cece1f95796034a/href The general idea behind AutoClearedValue is that a value hidden by this delegate would only be created when it is set (in our case, when it is accessed), and when viewLifecycleOwner becomes DESTROYED, it would null out the value. Makes sense, right? In order to access the view lifecycle, the code waits until Fragment.onCreate(), and registers the lifecycle observer there. Then, using the fragment as the lifecycle owner (!), it attempts to register a lifecycle observer on the view lifecycle owner. The bug hiding in plain sight The problem is that it is possible for the view lifecycle to be initialized in such a way that fragment.onStart() and therefore viewLifecycleOwner.lifecycle.addObserver never actually happens. The fragment goes directly from onViewCreated to onDestroyView. Meaning, fragment.onStart() and fragment.onStop() never happen. This means that fragment.viewLifecycleOwner.observe(fragment) will NEVER be ACTIVE, and therefore the observe block will never be called. The viewLifecycle reaches DESTROYED without it being observed. When does this happen? If a fragment is added with commitNow(), but then is detach()ed. This would mean that this could happen with FragmentPagerAdapter, as that also uses attach/detach under the hood. In my case, the bug surfaced when using the binding along with the following construct: https://medium.com/media/942d1d2a1b2b4bbdc77e4d11ef112b97/href In case of a bottom navigation view, where fragments were added but attached/detached, the view in the binding

## State of the Navigation Drawer

DevFeed: [State of the Navigation Drawer](<https://devfeed.tech/articles/state-of-the-navigation-drawer-22706.md>)

Original publisher: [Read original article](<https://medium.com/android-ui-patterns/state-of-the-navigation-drawer-1d2c8253de2a?source=rss----75dfb6474397---4>)

Author: Juhani Lehtimäki

Published: 2019-01-31T07:11:01Z

Content type: opinion

Language: en

Sources: [Android UI Patterns - Medium](<https://devfeed.tech/sources/android-ui-patterns-medium.md>)

Topics: [User interface design](<https://devfeed.tech/topics/ui-design.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Android](<https://devfeed.tech/topics/android.md>), [Google](<https://devfeed.tech/topics/google.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [google](<https://devfeed.tech/tags/google.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [navigation-drawer](<https://devfeed.tech/tags/navigation-drawer.md>), [ui-design](<https://devfeed.tech/tags/ui-design.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

This opinion article examines the changing role of the Navigation Drawer in Android UI design. It argues that bottom navigation is replacing the drawer in many modern Google apps because it makes core destinations more visible and discoverable, while the drawer remains useful for secondary or less frequently needed functions and for accommodating more items.

### Source excerpt

UI design patterns evolve. Some come into fashion and some go out of fashion. A pattern, once common, over used, and pervasive has been slowly been turned into background and removed. I'm talking, of course, about the Navigation Drawer. I recently had a discussion with a customer about the Navigation Drawer and its role in the current Android ecosystem. I put forth a claim that it is being phased out where possible.. including most Google's apps. The Navigation Drawer pattern, or hamburger menu, has been receiving fair amount of criticism for quite a long time. Main reasons for the criticism has been the fact that it hides core navigation behind hidden UI. Users won't find new features added to apps or find out about the ones already there. There are a good number of sources and experiences advising against the drawer: Hamburger Menus and Hidden Navigation Hurt UX Metrics Spotify ditches the controversial 'hamburger' menu in iOS app redesign Side Drawer Navigation Could Cost Half Your User Engagement 3 Good Reasons Why You Might Want to Remove that Hamburger Menu from Your Product So is Google actually ditching the pattern in their Android apps? It is still, after all, part of the Material Design guideline. If we take a survey of Google apps that have been updated to the modern design we can find a good number of apps that used to use the drawer but now use bottom navigation as their sole navigation pattern: A selection of Google first party apps that rely on bottom navigation. Finding few Google Android apps without drawer is hardly a proof that the drawer is gone for good. However, it is a clear sign of times changing. The drawer was once something that was present everywhere. The much-more discoverability supporting bottom navigation pattern is replacing the drawer where possible. You can find much more information about the bottom navigation pattern in the Material Design guidelines. Truth is that the drawer still lives on. Even on Google's redesigned apps. A se

## UI Pattern Evolution -- FAB-in-Bottom-Nav

DevFeed: [UI Pattern Evolution -- FAB-in-Bottom-Nav](<https://devfeed.tech/articles/ui-pattern-evolution-fab-in-bottom-nav-22709.md>)

Original publisher: [Read original article](<https://medium.com/android-ui-patterns/ui-pattern-evolution-fab-in-bottom-nav-6aaa34b9cc59?source=rss----75dfb6474397---4>)

Author: Juhani Lehtimäki

Published: 2018-01-10T14:19:30Z

Content type: opinion

Language: en

Sources: [Android UI Patterns - Medium](<https://devfeed.tech/sources/android-ui-patterns-medium.md>)

Topics: [ui](<https://devfeed.tech/topics/ui.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [design](<https://devfeed.tech/tags/design.md>), [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

This article discusses how established Android UI patterns evolve, focusing on placing a floating action button in a bottom navigation bar. It explains the intended roles of FABs and bottom navigation, the rationale for making a persistent action accessible across top-level screens, and the tension between navigation and action elements. The supplied text ends mid-sentence, so the discussion of anti-patterns is incomplete.

### Source excerpt

I've been writing about Android UI Patterns now for nearly 10 years. In the Android ecosystem existing patterns evolve and new patterns emerge from the work designers and developers do on the platform. Established pattern evolution is one of the most fascinating things to follow for couple of reasons: It points out that design patterns are not design rules. Patterns are solutions to problems. Solutions are not absolute. You are free to think what you can do with an established pattern to better solve your specific issue. You don't need to stop where the Material Design Guidelines end. However, to break the rules you should know the rules. Break them when you have a reason to. A designer proposing an alternative to an established pattern should be able to answer the question "why?". So before you decide to throw out the conventional FAB, take a look at what the FAB actually is and where it's meant to be used. FAB in Bottom Navigation FAB is the main action on the current screen. The default positioning to the bottom right enforces this thinking with users. But what if you have an action that you want to be reachable from anywhere from your top level screens? One option would be to repeat the button on each screen. In these cases you should make sure to keep the FAB constantly visible to indicate that it has not changed. But there's another option. Place the FAB on the bottom navigation bar. The bottom navigation pattern is also very well defined in the Material Design guidelines. It's worth taking a look before diving in. The bottom navigation is used to navigate between your top-level content. Your main action might logically feel to be on the same level than the other top-level content. However, making one of the navigation items an action does not feel right. All content accessible from the bottom navigation should be on the same level in your app hierarchy. FAB is already a well-established pattern and users can be expected to understand it. FAB triggers an actio

## On the Bottom Navigation Bar

DevFeed: [On the Bottom Navigation Bar](<https://devfeed.tech/articles/on-the-bottom-navigation-bar-22705.md>)

Original publisher: [Read original article](<https://medium.com/android-ui-patterns/on-the-bottom-navigation-bar-d07d9b4b5e18?source=rss----75dfb6474397---4>)

Author: Juhani Lehtimäki

Published: 2017-09-12T10:15:35Z

Content type: opinion

Language: en

Sources: [Android UI Patterns - Medium](<https://devfeed.tech/sources/android-ui-patterns-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>), [User interface design](<https://devfeed.tech/topics/ui-design.md>), [ui](<https://devfeed.tech/topics/ui.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [animation](<https://devfeed.tech/tags/animation.md>), [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [design](<https://devfeed.tech/tags/design.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-design](<https://devfeed.tech/tags/ui-design.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

An opinion article discusses Android bottom navigation, focusing on how it interacts with the Android back button, tab behavior, and navigation state. It recommends using tap-based navigation, hiding the bottom bar deeper in the app hierarchy, and carefully managing animations and back-button behavior.

### Source excerpt

Android bottom tabs, I mean Bottom Navigation, is here to stay. I have to admit that I wasn't overly happy when this was added to the Material Guidelines. But hey, times change. In the end this addition makes sense and for me, as a business owner, this makes even financial sense. By utilising bottom navigation we can make Android apps take one steps closer towards iOS app design. It's one step less we need to take into account when designing apps targeting multiple platforms. Note however, that I'm still not advocating 1-to-1 iOS-Android design. The platforms are different and need different designs! Now, the reason I had anxiety over introducing Bottom Navigation to Android is the thing that keeps causing most of Android navigation problems: the back button. On iOS back is always contextual as it is rendered in the UI. Not so on Android. The Android back button is outside your app's UI. It's a platform control without any visual hints of what it might or might not do. This is why on Android it is easy to make a UI design mistakes leading into a conflicting navigation state. Also, on Android tabs are swipeable, on iOS they're not. Fortunately, the Material Design guidelines propose bottom navigation not to behave like Android tabs but instead like iOS tabs. i.e. you tap, don't swipe between the navigation views. This solves yet another platform navigation issue. Swiping tabs are still reserved for the Android top tabs. Like they've been so far. All of this to work and to be understandable to our users we need to be consistent and careful. When implementing bottom navigation make sure to pay attention to details. Pay attention to the animation you play when switching views and make sure your back button management is spot on. To not make your user confused with the combination of bottom navigation and Android back button there are few simple guidelines you should follow: Whenever user navigates deeper into the app hierarchy make sure that the bottom navigation bar is