What is BottomNavigationView?
BottomNavigationView
is a part of Android’s Material Components that allows users to quickly switch between top-level views of an app with a bottom menu. It’s especially useful for apps with 3–5 main sections.
Prerequisites
- Android Studio Installed
- Basic knowledge of Java and Android development
Step 1: Add Material Dependency (Optional)
Open your build.gradle (Module: app)
and add:
dependencies { implementation 'com.google.android.material:material:1.12.0' }
Step 2: Add BottomNavigationView in activity_main.xml

<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"> <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/bottom_navigation" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:menu="@menu/bottom_nav_menu" /> </RelativeLayout>
Step 3: Create Menu Resource
Create a new menu file in res/menu/bottom_nav_menu.xml
:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_home" android:title="Home" /> <item android:id="@+id/nav_search" android:icon="@drawable/ic_search" android:title="Search" /> <item android:id="@+id/nav_profile" android:icon="@drawable/ic_profile" android:title="Profile" /> </menu>
Add icon from vector asset, Right-click on the drawable > New > Vector Asset.

Click Clip art

Select icon > OK > Next > Finish

add more icon

Step 4: Create Fragments
Create three fragments: HomeFragment
, SearchFragment
, and ProfileFragment
.
Example: HomeFragment.java

public class HomeFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_home, container, false); } }
Step 5: Create Fragment Layouts
Example: res/layout/fragment_home.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <TextView android:text="Welcome to Home" android:textSize="24sp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
Repeat for fragment_search.xml
and fragment_profile.xml
Step 6: Add Logic to MainActivity.java

import android.annotation.SuppressLint; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import com.google.android.material.bottomnavigation.BottomNavigationView; public class MainActivity extends AppCompatActivity { BottomNavigationView bottomNavigationView; @SuppressLint("NonConstantResourceId") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bottomNavigationView = findViewById(R.id.bottom_navigation); // Default Fragment getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, new HomeFragment()).commit(); bottomNavigationView.setOnItemSelectedListener(item -> { Fragment selectedFragment = null; if (item.getItemId() == R.id.nav_home) { selectedFragment = new HomeFragment(); } else if (item.getItemId() == R.id.nav_search) { selectedFragment = new SearchFragment(); }else if (item.getItemId() == R.id.nav_profile) { selectedFragment = new ProfileFragment(); } else { selectedFragment = new HomeFragment(); } getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, selectedFragment).commit(); return true; }); } }
Done!

You’ve successfully implemented BottomNavigationView
using Java in Android Studio. Now your app has a clean and intuitive navigation interface!