The Bottom Navigation Bar is a navigation view provided at the bottom of the screen making it easy for users to switch between multiple fragments or activities with the help of the bottom navigation bar.
We have provided four activities – Home, Search, Settings, and Profile. Users can easily switch between any of these. You can use fragments or activities as per your choice.
Step 1: Open Android Studio, Create New Project, Choose Empty Activity, and Name the Project “Bottom Navigation Activities”.
Step 2: Pre-requisites
colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="purple_200">#FFBB86FC</color> <color name="purple_500">#FF6200EE</color> <color name="purple_700">#FF3700B3</color> <color name="teal_200">#FF03DAC5</color> <color name="teal_700">#FF018786</color> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> <color name="lavender">#8692f7</color> <color name="grey">#d2d2d2</color> </resources>
strings.xml
<resources> <string name="app_name">Bottom Navigation</string> </resources>
Create Android Resource Directory “anim”
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="100%p" android:toXDelta="0" /> </set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="0" android:toXDelta="-100%p" /> </set>
themes.xml
Disable the action bar and change the theme color to lavender as per the below code.
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.BottomNavActivityPractice" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/lavender</item> <item name="colorPrimaryVariant">@color/lavender</item> <item name="colorOnPrimary">@color/white</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/teal_200</item> <item name="colorSecondaryVariant">@color/teal_700</item> <item name="colorOnSecondary">@color/black</item> <!-- Status bar color. --> <item name="android:statusBarColor">?attr/colorPrimaryVariant</item> <!-- Customize your theme here. --> <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> </style> <style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> </style> </resources>
bottom_background.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/lavender"/> <corners android:radius="40dp"/> </shape>
item_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/white"/> <item android:state_selected="false" android:color="@color/grey"/> </selector>
Step 5: Add all the vector assets to the drawable folder
Icons – home, search, settings, person pin.
Step 3: bottom_menu.xml
Right-click on res -> Android Resource Directory and select the menu then right-click on the menu directory and click on New -> Menu Resource File and name “bottom_menu”.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/bottom_home" android:icon="@drawable/baseline_home_24" android:title="Home" /> <item android:id="@+id/bottom_search" android:icon="@drawable/baseline_search_24" android:title="Search" /> <item android:id="@+id/bottom_settings" android:icon="@drawable/baseline_settings_24" android:title="Settings" /> <item android:id="@+id/bottom_profile" android:icon="@drawable/baseline_person_pin_24" android:title="Profile" /> </menu>
Step 7: activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Home" android:textColor="@color/lavender" android:layout_centerInParent="true" android:textSize="36sp" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNavigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginEnd="20dp" android:layout_marginStart="20dp" android:layout_marginBottom="30dp" android:layout_marginTop="30dp" android:background="@drawable/bottom_background" android:elevation="2dp" app:itemIconSize="30dp" app:itemIconTint="@drawable/item_selector" app:itemRippleColor="@android:color/transparent" app:labelVisibilityMode="unlabeled" app:menu="@menu/bottom_menu" /> </RelativeLayout>
Step 4: all XML files
Create four activities named – MainActivity (HomeActivity), SearchActivity, SettingsActivity, and ProfileActivity.
activity_search.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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SearchActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Search" android:textColor="@color/lavender" android:layout_centerInParent="true" android:textSize="36sp" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNavigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:layout_marginEnd="30dp" android:layout_marginStart="30dp" android:layout_marginTop="30dp" android:background="@drawable/bottom_background" android:elevation="2dp" app:itemIconSize="30dp" app:itemIconTint="@drawable/item_selector" app:itemRippleColor="@android:color/transparent" app:labelVisibilityMode="unlabeled" app:menu="@menu/bottom_menu" /> </RelativeLayout>
activity_settings.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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SettingsActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Settings" android:textColor="@color/lavender" android:layout_centerInParent="true" android:textSize="36sp" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNavigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:layout_marginEnd="30dp" android:layout_marginStart="30dp" android:layout_marginTop="30dp" android:background="@drawable/bottom_background" android:elevation="2dp" app:itemIconSize="30dp" app:itemIconTint="@drawable/item_selector" app:itemRippleColor="@android:color/transparent" app:labelVisibilityMode="unlabeled" app:menu="@menu/bottom_menu" /> </RelativeLayout>
activity_profile.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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ProfileActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Profile" android:textColor="@color/lavender" android:layout_centerInParent="true" android:textSize="36sp" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNavigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:layout_marginEnd="30dp" android:layout_marginStart="30dp" android:layout_marginTop="30dp" android:background="@drawable/bottom_background" android:elevation="2dp" app:itemIconSize="30dp" app:itemIconTint="@drawable/item_selector" app:itemRippleColor="@android:color/transparent" app:labelVisibilityMode="unlabeled" app:menu="@menu/bottom_menu" /> </RelativeLayout>
Step 5: MainActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import com.google.android.material.bottomnavigation.BottomNavigationView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigation); bottomNavigationView.setSelectedItemId(R.id.bottom_home); bottomNavigationView.setOnItemSelectedListener(item -> { switch (item.getItemId()) { case R.id.bottom_home: return true; case R.id.bottom_search: startActivity(new Intent(getApplicationContext(), SearchActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_settings: startActivity(new Intent(getApplicationContext(), SettingsActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_profile: startActivity(new Intent(getApplicationContext(), ProfileActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; } return false; }); } }
SearchActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import com.google.android.material.bottomnavigation.BottomNavigationView; public class SearchActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigation); bottomNavigationView.setSelectedItemId(R.id.bottom_search); bottomNavigationView.setOnItemSelectedListener(item -> { switch (item.getItemId()) { case R.id.bottom_home: startActivity(new Intent(getApplicationContext(),MainActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_search: return true; case R.id.bottom_settings: startActivity(new Intent(getApplicationContext(), SettingsActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_profile: startActivity(new Intent(getApplicationContext(), ProfileActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; } return false; }); } }
SettingsActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import com.google.android.material.bottomnavigation.BottomNavigationView; public class SettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigation); bottomNavigationView.setSelectedItemId(R.id.bottom_settings); bottomNavigationView.setOnItemSelectedListener(item -> { switch (item.getItemId()) { case R.id.bottom_home: startActivity(new Intent(getApplicationContext(),MainActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_search: startActivity(new Intent(getApplicationContext(), SearchActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_settings: return true; case R.id.bottom_profile: startActivity(new Intent(getApplicationContext(), ProfileActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; } return false; }); } }
ProfileActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import com.google.android.material.bottomnavigation.BottomNavigationView; public class ProfileActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigation); bottomNavigationView.setSelectedItemId(R.id.bottom_profile); bottomNavigationView.setOnItemSelectedListener(item -> { switch (item.getItemId()) { case R.id.bottom_home: startActivity(new Intent(getApplicationContext(),MainActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_search: startActivity(new Intent(getApplicationContext(), SearchActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_settings: startActivity(new Intent(getApplicationContext(), SettingsActivity.class)); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); finish(); return true; case R.id.bottom_profile: return true; } return false; }); } }
If you have any queries or errors, please feel free to comment below 😉
Please subscribe to my youtube channel ❤️
Check our previous post: Navigation Drawer Menu in Android Studio using Java
Check our Youtube Video: Bottom Navigation Bar in Android Studio