Bottom Navigation Bar
Example Code:
fragment_notification.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent">      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:text="Notifications" />    </RelativeLayout>  | 
NotificationFragment.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | package com.example.subitems;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;   public class NotificationFragment extends Fragment {      @Nullable     @Override     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {         return inflater.inflate(R.layout.fragment_notification, container, false);     } }   | 
fragment_dashboard.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14  | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent" android:layout_height="match_parent"     >      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:text="Dashboard" />  </RelativeLayout>  | 
DashboardFragment.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | package com.example.subitems;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;   public class DashboardFragment extends Fragment {      @Nullable     @Override     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {         return inflater.inflate(R.layout.fragment_dashboard, container, false);     } }   | 
fragment_home.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14  | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"     android:layout_height="match_parent">       <TextView         android:id="@+id/textView"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:text="Home" /> </RelativeLayout>  | 
HomeFragment.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | package com.example.subitems;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;   public class HomeFragment extends Fragment {      @Nullable     @Override     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {         return inflater.inflate(R.layout.fragment_home, container, false);     } }  | 
navigation.xml:
1234567891011121314151617181920
 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android">      <item         android:id="@+id/navigation_home"         android:icon="@drawable/ic_home_black_24dp"         android:title="@string/title_home" />      <item         android:id="@+id/navigation_dashboard"         android:icon="@drawable/ic_dashboard_black_24dp"         android:title="@string/title_dashboard" />      <item         android:id="@+id/navigation_notifications"         android:icon="@drawable/ic_notifications_black_24dp"         android:title="@string/title_notifications" />  </menu> 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android">      <item         android:id="@+id/navigation_home"         android:icon="@drawable/ic_home_black_24dp"         android:title="@string/title_home" />      <item         android:id="@+id/navigation_dashboard"         android:icon="@drawable/ic_dashboard_black_24dp"         android:title="@string/title_dashboard" />      <item         android:id="@+id/navigation_notifications"         android:icon="@drawable/ic_notifications_black_24dp"         android:title="@string/title_notifications" />  </menu>   | 
activity_main.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | <?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"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/container"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity">      <FrameLayout         android:id="@+id/fragment_container"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:layout_above="@id/navigation"/>        <android.support.design.widget.BottomNavigationView         android:id="@+id/navigation"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_alignParentBottom="true"         android:layout_marginStart="0dp"         android:layout_marginEnd="0dp"         android:background="?android:attr/windowBackground"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintLeft_toLeftOf="parent"         app:layout_constraintRight_toRightOf="parent"         app:menu="@menu/navigation" />  </RelativeLayout>   | 
MainActivity.java:
12345678910111213141516171819202122232425262728293031323334353637383940514243444546474849505152
 package com.example.subitems;  import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MenuItem;  public class MainActivity extends AppCompatActivity {      private BottomNavigationView.OnNavigationItemSelectedListener navListener =             new BottomNavigationView.OnNavigationItemSelectedListener() {                 @Override                 public boolean onNavigationItemSelected(@NonNull MenuItem item) {                     Fragment selectedFragment = null;                      switch (item.getItemId()) {                         case R.id.navigation_home:                             selectedFragment = new HomeFragment();                             break;                         case R.id.navigation_dashboard:                             selectedFragment = new DashboardFragment();                             break;                         case R.id.navigation_notifications:                             selectedFragment = new NotificationFragment();                             break;                     }                      getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,                             selectedFragment).commit();                      return true;                 }             };      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          BottomNavigationView bottomNav = findViewById(R.id.navigation);         bottomNav.setOnNavigationItemSelectedListener(navListener);          //I added this if statement to keep the selected fragment when rotating the device         if (savedInstanceState == null) {             getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,                     new HomeFragment()).commit();         }     } } 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 51 42 43 44 45 46 47 48 49 50 51 52  | package com.example.subitems;  import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MenuItem;  public class MainActivity extends AppCompatActivity {      private BottomNavigationView.OnNavigationItemSelectedListener navListener =             new BottomNavigationView.OnNavigationItemSelectedListener() {                 @Override                 public boolean onNavigationItemSelected(@NonNull MenuItem item) {                     Fragment selectedFragment = null;                      switch (item.getItemId()) {                         case R.id.navigation_home:                             selectedFragment = new HomeFragment();                             break;                         case R.id.navigation_dashboard:                             selectedFragment = new DashboardFragment();                             break;                         case R.id.navigation_notifications:                             selectedFragment = new NotificationFragment();                             break;                     }                      getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,                             selectedFragment).commit();                      return true;                 }             };      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          BottomNavigationView bottomNav = findViewById(R.id.navigation);         bottomNav.setOnNavigationItemSelectedListener(navListener);          //I added this if statement to keep the selected fragment when rotating the device         if (savedInstanceState == null) {             getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,                     new HomeFragment()).commit();         }     } }   |