A customizable and easy to use BottomBar navigation view with sleek animations, with support for ViewPager, ViewPager2, NavController, and badges.

Overview

AnimatedBottomBar

License: MIT API Download androidweekly.net

A customizable and easy to use bottom bar view with sleek animations.

Examples




Playground app

Download the playground app from Google Play, with this app you can try out all features and even generate XML with your selected configuration.

Contents

Getting started

Add the following dependency to your build.gradle:

implementation 'nl.joery.animatedbottombar:library:1.0.9'

Define AnimatedBottomBar in your XML layout with custom attributes.

<nl.joery.animatedbottombar.AnimatedBottomBar
    android:id="@+id/bottom_bar"
    android:background="#FFF"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:abb_selectedTabType="text"
    app:abb_indicatorAppearance="round"
    app:abb_indicatorMargin="16dp"
    app:abb_indicatorHeight="4dp"
    app:abb_tabs="@menu/tabs"
    app:abb_selectedIndex="1" />

Create a file named tabs.xml in the res/menu/ resources folder:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/tab_home"
        android:icon="@drawable/home"
        android:title="@string/home" />
    <item
        android:id="@+id/tab_alarm"
        android:icon="@drawable/alarm"
        android:title="@string/alarm" />
    <item
        android:id="@+id/tab_bread"
        android:icon="@drawable/bread"
        android:title="@string/bread" />
    <item
        android:id="@+id/tab_cart"
        android:icon="@drawable/cart"
        android:title="@string/cart" />
</menu>

Get notified when the selected tab changes by setting callbacks:

bottom_bar.onTabSelected = {
    Log.d("bottom_bar", "Selected tab: " + it.title)
}
bottom_bar.onTabReselected = {
    Log.d("bottom_bar", "Reselected tab: " + it.title)
}

Or set a listener if you need more detailed information:

bottom_bar.setOnTabSelectListener(object : AnimatedBottomBar.OnTabSelectListener {
    override fun onTabSelected(
        lastIndex: Int,
        lastTab: AnimatedBottomBar.Tab?,
        newIndex: Int,
        newTab: AnimatedBottomBar.Tab
    ) {
        Log.d("bottom_bar", "Selected index: $newIndex, title: ${newTab.title}")
    }

    // An optional method that will be fired whenever an already selected tab has been selected again.
    override fun onTabReselected(index: Int, tab: AnimatedBottomBar.Tab) {
        Log.d("bottom_bar", "Reselected index: $index, title: ${tab.title}")
    }
})

Managing tabs

Short overview on how to manage tabs using code.

Creating new tabs

// Creating a tab by passing values
val bottomBarTab1 = AnimatedBottomBar.createTab(drawable, "Tab 1")

// Creating a tab by passing resources
val bottomBarTab2 = AnimatedBottomBar.createTab(R.drawable.ic_home, R.string.tab_2, R.id.tab_home)

Adding new tabs

// Adding a tab at the end
AnimatedBottomBar.addTab(bottomBarTab1)

// Add a tab at a specific position
AnimatedBottomBar.addTabAt(1, bottomBarTab2)

Removing tabs

// Removing a tab by object reference
val tabToRemove = AnimatedBottomBar.tabs[1]
AnimatedBottomBar.removeTab(tabToRemove)

// Removing a tab at a specific position
AnimatedBottomBar.removeTabAt(tabPosition)

// Removing a tab by the given ID resource
AnimatedBottomBar.removeTabById(R.id.tab_home)

Selecting tabs

// Selecting a tab by object reference
val tabToSelect = AnimatedBottomBar.tabs[1]
AnimatedBottomBar.selectTab(tabToSelect)

// Selecting a tab at a specific position
AnimatedBottomBar.selectTabAt(1)

// Selecting a tab by the given ID resource
AnimatedBottomBar.selectTabById(R.id.tab_home)

Enabling / disabling tabs

// Disabling a tab by object reference
val tabToDisable = AnimatedBottomBar.tabs[1]
AnimatedBottomBar.setTabEnabled(tabToDisable, false) // Use true for re-enabling the tab

// Disabling a tab at a specific position
AnimatedBottomBar.setTabEnabledAt(1, false)

// Disabling a tab by the given ID resource
AnimatedBottomBar.setTabEnabledById(R.id.tab_home, false)

Intercepting tabs

This could be useful for example restricting access to a premium area. You can use a callback or a more detailed listener:

bottom_bar.onTabIntercepted = {
    if (newTab.id == R.id.tab_pro_feature && !hasProVersion) {
        // e.g. show a dialog
        false
    }
    true
}

Detailed listener:

bottom_bar.setOnTabInterceptListener(object : AnimatedBottomBar.OnTabInterceptListener {
    override fun onTabIntercepted(
        lastIndex: Int,
        lastTab: AnimatedBottomBar.Tab?,
        newIndex: Int,
        newTab: AnimatedBottomBar.Tab
    ): Boolean {
        if (newTab.id == R.id.tab_pro_feature && !hasProVersion) {
            // e.g. show a dialog
            return false
        }
        return true
    }
})

Tab badges

Instructions on how to set badges for tabs, a AnimatedBottomBar.Badge object should be supplied to the BottomBar, note that it is also possible to add badges without text.

Adding badges

// Adding a badge by tab reference
val tabToAddBadgeAt = AnimatedBottomBar.tabs[1]
AnimatedBottomBar.addBadgeAtTab(tabToAddBadgeAt, AnimatedBottomBar.Badge("99"))

// Adding a badge at a specific position
AnimatedBottomBar.addBadgeAtTabIndex(1, AnimatedBottomBar.Badge("99"))

// Adding a badge at the given ID resource
AnimatedBottomBar.addBadgeAtTabId(R.id.tab_home, AnimatedBottomBar.Badge("99"))

Removing badges

// Removing a badge by tab reference
val tabToRemoveBadgeFrom = AnimatedBottomBar.tabs[1]
AnimatedBottomBar.clearBadgeAtTab(tabToRemoveBadgeFrom)

// Removing a badge at a specific position
AnimatedBottomBar.clearBadgeAtTabIndex(1, AnimatedBottomBar.Badge("99"))

// removing a badge at the given ID resource
AnimatedBottomBar.clearBadgeAtTabId(R.id.tab_home, AnimatedBottomBar.Badge("99"))

Styling individual badges

Additionally there is also the possibility to individually style badges.

AnimatedBottomBar.Badge(
    text = "99",
    backgroundColor = Color.RED,
    textColor = Color.GREEN,
    textSize =  12.spPx // in pixels
)

Usage with ViewPager

It is easy to use the BottomBar with a ViewPager or ViewPager2, you can simply use the setupWithViewPager() method. Please note that the number of tabs and ViewPager pages need to be identical in order for it to function properly.

Usage

// For ViewPager use:
bottom_bar.setupWithViewPager(yourViewPager)

// For ViewPager2 use:
bottom_bar.setupWithViewPager2(yourViewPager2)

Configuration

An overview of all configuration options. All options can also be accessed and set programmatically, by their equivalent name.

Tabs

Attribute Description Default
abb_tabs Tabs can be defined in a menu file (Menu resource), in the res/menu/ resource folder.

The icon and title attribute are required. By default all tabs are enabled, set android:enabled to false to disable a tab.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/tab_example"
        android:icon="@drawable/ic_example"
        android:title="@string/tab_example"
        android:enabled="true|false" />
    ...etc
</menu>
abb_selectedIndex Define the default selected tab index.
abb_selectedTabId Define the default selected tab by its ID, for example @id/tab_id

Tab appearance

Attribute Description Default
abb_selectedTabType Determines whether the icon or text should be shown when a tab has been selected.

icon

text

icon
abb_tabColor The color of the icon or text when the tab is not selected. @color/textColorPrimary
abb_tabColorSelected The color of the icon or text when the tab is selected. @color/colorPrimary
abb_tabColorDisabled The color of the icon or text whenever the tab has been disabled. @color/textColorSecondary
abb_textAppearance Customize the look and feel of text in tabs, down below is an example of a custom text appearance.

Define a new style in res/values/styles.xml:
<style name="CustomText">
    <item name="android:textAllCaps">true</item>
    <item name="android:fontFamily">serif</item>
    <item name="android:textSize">16sp</item>
    <item name="android:textStyle">italic|bold</item>
</style>
abb_textStyle Style (normal, bold, italic, bold|italic) for the text.

Use bottom_bar.typeface to programmatically set text style.
normal
abb_textSize Size of the text. Recommended dimension type for text is "sp" (scaled-pixels), for example: 14sp. 14sp
abb_iconSize Increase or decrease the size of the icon. 24dp
abb_rippleEnabled Enables the 'ripple' effect when selecting a tab.

false
abb_rippleColor Change the color of the aforementioned ripple effect. Default theme color

Badges

Attribute Description Default
abb_badgeBackgroundColor The background color of the badges. #ff0c10 (red)
abb_badgeTextColor The text color of the text inside the badges. #FFFFFF
abb_badgeTextSize The text size of the text inside the badges. Recommended dimension type for text is "sp" (scaled-pixels), for example: 14sp. 10sp
abb_badgeAnimation The enter and exit animation type for badges.

none
scale
fade
scale
abb_badgeAnimationDuration The duration of the entry and exit animation of a badge. 150

Animations

Attribute Description Default
abb_animationDuration The duration of all animations, including the indicator animation. 400
abb_tabAnimation The enter and exit animation style of the tabs which are not selected.

none

slide

fade

fade
abb_tabAnimationSelected The enter and exit animation style of the selected tab.

none

slide

fade

slide
abb_animationInterpolator The interpolator used for all animations.

See "Android Interpolators: A Visual Guide" for more information on available interpolators.

Example value: @android:anim/overshoot_interpolator
FastOutSlowInInterpolator

Indicator

Attribute Description Default
abb_indicatorColor The color of the indicator. @android/colorPrimary
abb_indicatorHeight The height of the indicator. 3dp
abb_indicatorMargin The horizontal margin of the indicator. This determines the width of the indicator. 0dp
abb_indicatorAppearance Configure the shape of the indicator either to be square or round.

invisible

square

round

square
abb_indicatorLocation Configure the location of the selected tab indicator, top, bottom or invisible.

top

bottom

top
abb_indicatorAnimation The animation type of the indicator when changing the selected tab.

none


slide

fade
slide

Used by

Featured in

Credits

License

MIT License

Copyright (c) 2020 Joery Droppers (https://github.com/Droppers)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Comments
  •  Bintray Shutting Down May 2021 -- Host artifacts elsewhere?

    Bintray Shutting Down May 2021 -- Host artifacts elsewhere?

    Hi! A couple days ago JFrog (which owns Bintray/JCenter) announced that they're sunsetting Bintray/JCenter - the last day to access these repositories will be May 2021. https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/

    I know a lot of tooling goes into artifact upload to a repository, so I wanted to throw a signal flare up now so nobody is caught by surprise on May 1.

    enhancement 
    opened by russellbanks 9
  • Allow to reset selection

    Allow to reset selection

    I have a use case where when the user selects a tab, a certain view would show. then if the user reselects that tab that view would disappear, but I can't find a way to deselect the tab or reset the selection.

    I managed to handle this using this useful callback:

    mainBar.onTabReselected = { tab ->
                    when (tab?.id) {
                        R.id.fontSize -> {
                            seekBarView.reverseVisibility()
                             //  mainBar.resetSelection()   or   tab.deselect()
                        }
                       // other code
                    }
                }
    
    opened by AlaaZarifa 6
  • Improve performance

    Improve performance

    This PR reduces memory allocations, improves animation performance.

    More information about changes in commit messages but if to be briefly:

    • Animators can be cached
    • Integer constants are more preferable way than enums
    • Build layouts in code, not in XML
    • Fix tests
    • Don't use a path to draw a half-round rectangle in BadgeView
    opened by pelmenstar1 5
  • How to use fragment with whis AnimatedBottomBar

    How to use fragment with whis AnimatedBottomBar

    How do we use fragment with this library? Let say i want to change FrameLayout with fragmentLayout base on position. Let say when we on Home, so my FrameLayout change to fragment_home. Is it possible to use switch case programatically?

    question 
    opened by abdulazizahwan 5
  • Disable tabs

    Disable tabs

    Hi! I have just tried your lib in an application and, although I know we can intercept some tabs with the OnTabInterceptedListener, I would love to have the possibility to completely disable some tabs, preventing the user to click on them and displaying the icon with another color (i.e, in my application the icons are shown in blue and the disabled ones in grey).

    In my application, the users need to complete some data to advance to the next section, so it would be great to only enable those tabs when the data is completed.

    Could it be possible to implement this feature?

    Thanks a lot!!!

    enhancement 
    opened by Riflin 5
  • (JAVA) Adding text to AnimatedBottomBar.Badge() not working

    (JAVA) Adding text to AnimatedBottomBar.Badge() not working

    Code (Java) bottom_bar.setBadgeAtTabIndex(1, new AnimatedBottomBar.Badge("1"));

    Cannot resolve constructor 'Badge(java.lang.String)'

    Not sure if this is working in kotlin, but so far this means badges can't have text when using java

    enhancement 
    opened by ZenHap 4
  • Icon padding?

    Icon padding?

    Hi, thinking about using this library for my app, but supplying a bottom bar with png drawables makes the icons look big and distasteful. Is there an option to add padding or margin for icons in xml? Thanks

    enhancement 
    opened by vexonius 4
  • Add function to set icons programatically

    Add function to set icons programatically

    It would be great to have the feature to set icons for the bottom bar programmatically as it would mean that any third party libraries such as Android Iconics can be utilised so that drawable resources do not have to be used in XML and can be created programmatically instead.

    bottomBar.tabs[i].icon = customIcon currently says Val cannot be reassigned.

    opened by russellbanks 2
  • Add Support for NavController

    Add Support for NavController

    Hello, I really like the design of your library, and I was wondering if you could add the ability to easily set it up with a NavController, as the library I was previously using, ibrahimsn98/SmoothBottomBar, has this functionality. I found how they implemented it, and was able to modify their code to work with your library. I have included the file I modified instead of trying to create a fork of your library, as I am not familiar with how your library works internally. I don't know if this helps, but I belive this is how they used the NavigationComponentHelper in their main class:

        fun setupWithNavController(menu: Menu, navController: NavController){
            NavigationComponentHelper.setupWithNavController(menu,this,navController)
        }
    

    Thank you for considering this! NavigationComponentHelper.txt

    enhancement 
    opened by hgh-bibliophile 2
  • android.view.InflateException

    android.view.InflateException

    My app is crashing when i applied this library, i tried to create a new project following the readME.md settings but keeps showing me this error:

    2020-06-08 06:39:44.178 9236-9236/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 9236 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class nl.joery.animatedbottombar.AnimatedBottomBar at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2895) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1616) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:6651) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824) Caused by: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class nl.joery.animatedbottombar.AnimatedBottomBar Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class nl.joery.animatedbottombar.AnimatedBottomBar Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at android.view.LayoutInflater.createView(LayoutInflater.java:651) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734) at android.view.LayoutInflater.rInflate(LayoutInflater.java:867) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828) at android.view.LayoutInflater.inflate(LayoutInflater.java:519) at android.view.LayoutInflater.inflate(LayoutInflater.java:427) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.example.myapplication.MainActivity.onCreate(MainActivity.java:12) at android.app.Activity.performCreate(Activity.java:7088) at android.app.Activity.performCreate(Activity.java:7079) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2895) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1616) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:6651) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824) Caused by: java.lang.Exception: Menu item attribute 'icon' for tab named 'Home' is missing at nl.joery.animatedbottombar.MenuParser.parse(MenuParser.kt:22) at nl.joery.animatedbottombar.AnimatedBottomBar.initInitialTabs(AnimatedBottomBar.kt:240) at nl.joery.animatedbottombar.AnimatedBottomBar.initAttributes(AnimatedBottomBar.kt:190) at nl.joery.animatedbottombar.AnimatedBottomBar.(AnimatedBottomBar.kt:50) at nl.joery.animatedbottombar.AnimatedBottomBar.(AnimatedBottomBar.kt:27) at nl.joery.animatedbottombar.AnimatedBottomBar.(Unknown Source:6) at java.lang.reflect.Constructor.newInstance0(Native Method)聽 at java.lang.reflect.Constructor.newInstance(Constructor.java:334)聽 at android.view.LayoutInflater.createView(LayoutInflater.java:651)聽 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)聽 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)聽 at android.view.LayoutInflater.rInflate(LayoutInflater.java:867)聽 at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)聽 at android.view.LayoutInflater.inflate(LayoutInflater.java:519)聽 at android.view.LayoutInflater.inflate(LayoutInflater.java:427)聽 at android.view.LayoutInflater.inflate(LayoutInflater.java:374)聽 at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)聽 at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)聽 at com.example.myapplication.MainActivity.onCreate(MainActivity.java:12)聽 at android.app.Activity.performCreate(Activity.java:7088)聽 at android.app.Activity.performCreate(Activity.java:7079)聽 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)聽 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)聽 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2895)聽 at android.app.ActivityThread.-wrap11(Unknown Source:0)聽 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1616)聽 at android.os.Handler.dispatchMessage(Handler.java:106)聽 at android.os.Looper.loop(Looper.java:176)聽 at android.app.ActivityThread.main(ActivityThread.java:6651)聽 at java.lang.reflect.Method.invoke(Native Method)聽 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)聽 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)聽

    question 
    opened by KromeThirty 2
  • Can't use it with a Navigation component

    Can't use it with a Navigation component

    I tried to use this bottom bar with Navigation component, tried to tie the items with fraagments using a NavController but i can't set up this bottom bar with it!

    question 
    opened by chaddinski 2
  • How do I handle the app orientation?

    How do I handle the app orientation?

    The bottom navigation bar does not restore but starts on the initial home when rotated on the last tab index selected, but the display remains on the fragment.

    opened by DOMO-Dom 0
  • Add Support for FAB (Floating Action Button) with Cradle margins.

    Add Support for FAB (Floating Action Button) with Cradle margins.

    Currently a Fab could be arranged on top of the navigation view with Margins or Constraints but unlike material design bottom bar this does not create a cut (curved) where the fab is placed.

    opened by Gidde-Abhishek 0
  • What is the latest version?

    What is the latest version?

    The version I download and look at is different if I look at the source on the Github

    For example, the version downloaded to the Library has a layout folder, but if you look at the source in the Github Webstore, there is no layout folder.

    Which version is the latest?

    opened by WORLD8848 0
  • This library does NOT work with androidx.appcompat:appcompat:1.5.0

    This library does NOT work with androidx.appcompat:appcompat:1.5.0

    by upgrading to androidx.appcompat:appcompat:1.5.0 it cause this error: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction

    it works by androidx.appcompat:appcompat:1.4.2 fine but NOT 1.5.0

    opened by HassanRahmanian 0
  • unexpected resource type : 'menu' expected string

    unexpected resource type : 'menu' expected string

    there is a red error message when using AnimatedBottomBar

    in android studio, in Design tab, app_tabs field gets red with this error message: "unexpected resource type : 'menu' expected string"

    but it works fine anyway...

    opened by HassanRahmanian 1
Releases(1.1.0)
Owner
Joery
Joery
Android Navigation Fragment Share Element Example: Use Share Element Transition with recyclerView Item and ViewPager2 Item.

Android-Navigation-Fragment-Share-Element-Example 说明 Android 使用Navigation导航切换Fragment中使用共享元素过渡动画的例子:将在listFragment的RecyclerView的Item共享元素过渡到pagerFragme

null 3 Sep 28, 2022
A sleek, out of the box, easy to understand and use, swipe gesture based Navigational Library for android.

Facilis Swipe gesture based navigational library for Android. Watch Demo Video: Getting Started To get this project into your build: Gradle Add it in

Prem Suman 35 Feb 15, 2022
Animated Tab Bar is an awesome navigation extension that you can use to add cool, animated and fully customizable tab navigation in your apps

Animated Tab Bar is an awesome navigation extension that you can use to add cool, animated and fully customizable tab navigation in your apps. The extension provides handy methods and properties to change the behaviour as well as the appearance of the navigation bar.

Zain Ul Hassan 4 Nov 30, 2022
A small navigation library for Jetpack Compose with state saving, backstack and animations support.

A small navigation library for Jetpack Compose with state saving, backstack and animations support.

Xinto 5 Dec 27, 2022
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock.

Android ViewPagerIndicator Paging indicator widgets that are compatible with the ViewPager from the Android Support Library to improve discoverability

Jake Wharton 10.2k Dec 26, 2022
DSC Moi University session on using Navigation components to simplify creating navigation flow in our apps to use best practices recommended by the Google Android Team

Navigation Components Navigate between destination using safe args How to use the navigation graph and editor How send data between destinations Demo

Breens Mbaka 6 Feb 3, 2022
Navigation Drawer Bottom Navigation View

LIVE #019 - Toolbar, Navigation Drawer e BottomNavigationView com Navigation Com

Kaique Ocanha 6 Jun 15, 2022
A small and simple, yet fully fledged and customizable navigation library for Jetpack Compose

A small and simple, yet fully fledged and customizable navigation library for Jetpack Compose

Vitali Olshevski 290 Dec 29, 2022
BubbleTabBar is bottom navigation bar with customizable bubble like tabs

BubbleTabBar BubbleTabBar is bottom navigation bar with customizable bubble like tabs Usage <com.fxn.BubbleTabBar android:id="@+id/

Akshay sharma 576 Dec 30, 2022
A simple, highly customizable compose navigation component for Android & Desktop platform.

介绍 一个简单并提供高度扩展功能的 Compose 导航组件,同时支持 Android 和 Desktop 平台。 常用功能 使用 下载 // Android implementation("io.github.succlz123:compose-screen-android:0.0.1") //

Ning 15 Nov 24, 2022
An interactive indicator to navigate between the different pages of a ViewPager

Android PagerSlidingTabStrip Interactive paging indicator widget, compatible with the ViewPager from the Android Support Library. Try out the sample a

Andreas Stütz 121 Sep 10, 2022
Alligator is a modern Android navigation library that will help to organize your navigation code in clean and testable way.

Alligator Alligator is a modern Android navigation library that will help to organize your navigation code in clean and testable way. Features Any app

Artur Artikov 290 Dec 9, 2022
[ACTIVE] Simple Stack, a backstack library / navigation framework for simpler navigation and state management (for fragments, views, or whatevers).

Simple Stack Why do I want this? To make navigation to another screen as simple as backstack.goTo(SomeScreen()), and going back as simple as backstack

Gabor Varadi 1.3k Jan 2, 2023
Android multi-module navigation built on top of Jetpack Navigation Compose

MultiNavCompose Android library for multi-module navigation built on top of Jetpack Navigation Compose. The goal of this library is to simplify the se

Jeziel Lago 21 Dec 10, 2022
Navigation Component: THE BEST WAY to create navigation flows for your app

LIVE #017 - Navigation Component: A MELHOR FORMA de criar fluxos de navegação para o seu app! Código fonte do projeto criado na live #017, ensinando c

Kaique Ocanha 4 Jun 15, 2022
New style for app design simple bottom navigation with side navigation drawer UI made in Jetpack Compose.😉😎

BottomNavWithSideDrawer New style for app design simple bottom navigtaion with side navigation drawer UI made in Jetpack Compose. ?? ?? (Navigation Co

Arvind Meshram 5 Nov 24, 2022
Bottom-App-Bar-with-Bottom-Navigation-in-Jetpack-compose-Android - Bottom App Bar with Bottom Navigation in Jetpack compose

Bottom-App-Bar-with-Bottom-Navigation-in-Jetpack-compose-Android This is simple

Shruti Patel 1 Jul 11, 2022
NavigationAndFragments - A use case for fragments and navigation

NavigationAndFragments A use case for fragments and navigation. To implement this use case, follow these steps : Create a new fragment navigation xml

Google Developers 3 Sep 15, 2022
A small navigation library for Android to ease the use of fragment transactions & handling backstack (also available for Jetpack Compose).

A small navigation library for Android to ease the use of fragment transactions & handling backstack (also available for Jetpack Compose).

Kaustubh Patange 88 Dec 11, 2022