Google added Bottom Navigation navigation control to its Material design. Android has never had an official navigation controller, and its own implementation is really multifarious. With this provision, it is similar to the bottom Toolbar of apple, and our APP will have the same style in the future. Let's see an effect first:
This is an official map in Material design, which is really good.
1. Download address of bottomnavigationbar
https://github.com/Ashok-Varma/BottomNavigation
2. Method of use
2.1 add in Gradle
compile 'com.ashokvarma.android:bottom-navigation-bar:0.9.5'
2.2 layout realization
<com.ashokvarma.bottomnavigation.BottomNavigationBar android:layout_gravity="bottom" android:id="@+id/bottom_navigation_bar" android:layout_width="match_parent" android:layout_height="wrap_content"/>
2.3 add BottomNavigationItem to Activity in class
BottomNavigationBar bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar); bottomNavigationBar .addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home")) .addItem(new BottomNavigationItem(R.drawable.ic_book_white_24dp, "Books")) .addItem(new BottomNavigationItem(R.drawable.ic_music_note_white_24dp, "Music")) .addItem(new BottomNavigationItem(R.drawable.ic_tv_white_24dp, "Movies & TV")) .addItem(new BottomNavigationItem(R.drawable.ic_videogame_asset_white_24dp, "Games")) .initialise();
2.4 set event listener TabChangeListener
bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener(){ @Override public void onTabSelected(int position) { } @Override public void onTabUnselected(int position) {] } @Override public void onTabReselected(int position) { } });
3. Case realization
Layout file
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/activity_navigation_view_demo" tools:context="com.lidong.demo.navigation_view.BottomNavigationBarDemoActivity"> <LinearLayout android:id="@+id/tb" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" /> <com.ashokvarma.bottomnavigation.BottomNavigationBar android:id="@+id/bottom_navigation_bar" android:layout_width="match_parent" android:layout_alignParentBottom="true" android:layout_height="wrap_content"/> </RelativeLayout>
Activity Code:
package com.lidong.demo.navigation_view; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import com.ashokvarma.bottomnavigation.BottomNavigationBar; import com.ashokvarma.bottomnavigation.BottomNavigationItem; import com.lidong.demo.R; /** * BottomNavigationBar Realization */ public class BottomNavigationBarDemoActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener { private BottomNavigationBar bottomNavigationBar; int lastSelectedPosition = 0; private String TAG = BottomNavigationBarDemoActivity.class.getSimpleName(); private LocationFragment mLocationFragment; private FindFragment mFindFragment; private FavoritesFragment mFavoritesFragment; private BookFragment mBookFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navigation_view_demo); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar); bottomNavigationBar .addItem(new BottomNavigationItem(R.mipmap.ic_location_on_white_24dp, "position").setActiveColor(R.color.orange)) .addItem(new BottomNavigationItem(R.mipmap.ic_find_replace_white_24dp, "find").setActiveColor(R.color.blue)) .addItem(new BottomNavigationItem(R.mipmap.ic_favorite_white_24dp, "hobby").setActiveColor(R.color.green)) .addItem(new BottomNavigationItem(R.mipmap.ic_book_white_24dp, "books").setActiveColor(R.color.blue)) .setFirstSelectedPosition(lastSelectedPosition ) .initialise(); bottomNavigationBar.setTabSelectedListener(this); setDefaultFragment(); } /** * Set default */ private void setDefaultFragment() { FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); mLocationFragment = LocationFragment.newInstance("position"); transaction.replace(R.id.tabs, mLocationFragment); transaction.commit(); } @Override public void onTabSelected(int position) { Log.d(TAG, "onTabSelected() called with: " + "position = [" + position + "]"); FragmentManager fm = this.getFragmentManager(); //Open transaction FragmentTransaction transaction = fm.beginTransaction(); switch (position) { case 0: if (mLocationFragment == null) { mLocationFragment = LocationFragment.newInstance("position"); } transaction.replace(R.id.tb, mLocationFragment); break; case 1: if (mFindFragment == null) { mFindFragment = FindFragment.newInstance("find"); } transaction.replace(R.id.tb, mFindFragment); break; case 2: if (mFavoritesFragment == null) { mFavoritesFragment = FavoritesFragment.newInstance("hobby"); } transaction.replace(R.id.tb, mFavoritesFragment); break; case 3: if (mBookFragment == null) { mBookFragment = BookFragment.newInstance("books"); } transaction.replace(R.id.tb, mBookFragment); break; default: break; } // Transaction submission transaction.commit(); } @Override public void onTabUnselected(int position) { Log.d(TAG, "onTabUnselected() called with: " + "position = [" + position + "]"); } @Override public void onTabReselected(int position) { } }
Code of fragment
package com.lidong.demo.navigation_view; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.lidong.demo.R; public class LocationFragment extends Fragment { public static LocationFragment newInstance(String param1) { LocationFragment fragment = new LocationFragment(); Bundle args = new Bundle(); args.putString("agrs1", param1); fragment.setArguments(args); return fragment; } public LocationFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_location, container, false); Bundle bundle = getArguments(); String agrs1 = bundle.getString("agrs1"); TextView tv = (TextView)view.findViewById(R.id.tv_location); tv.setText(agrs1); return view; } }
The code is easy to implement. Load the layout, add the BottomNavigationItem, and set the TabChangeListener to finish the bottom navigation controller.
Effect realization: