Search code examples
androidbottomnavigationview

Android new Bottom Navigation bar or BottomNavigationView


Saw the new guideline came out, and used in google photos latest app. Have no idea how to use the new Bottom Navigation Bar. See through the new support lib, didn't find any lead.

enter image description here

Can not find any official sample.

How to use the new Bottom bar? Don't want to do any customize.


Solution

  • I think you might looking for this.

    Here's a quick snippet to get started:

    public class MainActivity extends AppCompatActivity {
        private BottomBar mBottomBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Notice how you don't use the setContentView method here! Just
            // pass your layout to bottom bar, it will be taken care of.
            // Everything will be just like you're used to.
            mBottomBar = BottomBar.bind(this, R.layout.activity_main,
                    savedInstanceState);
    
            mBottomBar.setItems(
                    new BottomBarTab(R.drawable.ic_recents, "Recents"),
                    new BottomBarTab(R.drawable.ic_favorites, "Favorites"),
                    new BottomBarTab(R.drawable.ic_nearby, "Nearby"),
                    new BottomBarTab(R.drawable.ic_friends, "Friends")
            );
    
            mBottomBar.setOnItemSelectedListener(new OnTabSelectedListener() {
                @Override
                public void onItemSelected(final int position) {
                    // the user selected a new tab
                }
            });
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mBottomBar.onSaveInstanceState(outState);
        }
    }
    

    Here is reference link.

    https://github.com/roughike/BottomBar

    EDIT New Releases.

    The Bottom Navigation View has been in the material design guidelines for some time, but it hasn’t been easy for us to implement it into our apps. Some applications have built their own solutions, whilst others have relied on third-party open-source libraries to get the job done. Now the design support library is seeing the addition of this bottom navigation bar, let’s take a dive into how we can use it!

    How to use ?

    To begin with we need to update our dependency!

    compile ‘com.android.support:design:25.0.0’
    

    Design xml.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <!-- Content Container -->
    
        <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/colorPrimary"
            app:itemIconTint="@color/white"
            app:itemTextColor="@color/white"
            app:menu="@menu/bottom_navigation_main" />
    
    </RelativeLayout>
    

    Create menu as per your requirement.

    <?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/action_favorites"
            android:enabled="true"
            android:icon="@drawable/ic_favorite_white_24dp"
            android:title="@string/text_favorites"
            app:showAsAction="ifRoom" />
        <item
            android:id="@+id/action_schedules"
            android:enabled="true"
            android:icon="@drawable/ic_access_time_white_24dp"
            android:title="@string/text_schedules"
            app:showAsAction="ifRoom" />
        <item
            android:id="@+id/action_music"
            android:enabled="true"
            android:icon="@drawable/ic_audiotrack_white_24dp"
            android:title="@string/text_music"
            app:showAsAction="ifRoom" />
    </menu>
    

    Handling Enabled / Disabled states. Make selector file.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item
          android:state_checked="true"
          android:color="@color/colorPrimary" />
      <item
          android:state_checked="false"
          android:color="@color/grey" />
     </selector>
    

    Handle click events.

    BottomNavigationView bottomNavigationView = (BottomNavigationView)
                    findViewById(R.id.bottom_navigation);
            
    bottomNavigationView.setOnNavigationItemSelectedListener(
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.action_favorites:
                            
                            break;
                        case R.id.action_schedules:
                        
                            break;
                        case R.id.action_music:
                        
                            break;
                    }
                    return false;
                }
    });
    

    Edit : Using Androidx you just need to add below dependencies.

    implementation 'com.google.android.material:material:1.2.0-alpha01'
    

    Layout

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 xmlns:app="http://schemas.android.com/apk/res-auto" 
                 xmlns:tools="http://schemas.android.com/tools"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent">
        <com.google.android.material.bottomnavigation.BottomNavigationView
                android:layout_gravity="bottom"
                app:menu="@menu/bottom_navigation_menu"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
    </FrameLayout>
    

    If you want to read more about it's methods and how it works read this.

    Surely it will help you.