Navigation Drawer Tutorial
Introduction
The Navigation Drawer is a common UI pattern in Android apps. It provides a smooth and convenient way to navigate between different sections of the app. This tutorial will guide you through the process of creating a Navigation Drawer from scratch.
Step 1: Setting Up the Project
First, create a new Android project in Android Studio. Make sure to select "Empty Activity" for simplicity. Once the project is created, open the build.gradle file and ensure you have the following dependencies:
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
}
Step 2: Creating the Drawer Layout
Next, we need to set up the layout for our Navigation Drawer. Open the activity_main.xml file and replace its content with the following:
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- Main content -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Navigation drawer -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/drawer_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
This layout includes a DrawerLayout as the root element, a FrameLayout for the main content, and a NavigationView for the drawer itself.
Step 3: Creating the Menu
We need to create a menu resource file for the Navigation Drawer. Go to the res/menu directory and create a new file named drawer_menu.xml. Add the following content:
<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_profile"
android:icon="@drawable/ic_profile"
android:title="Profile" />
<item
android:id="@+id/nav_settings"
android:icon="@drawable/ic_settings"
android:title="Settings" />
</menu>
This menu file defines the items that will appear in the Navigation Drawer, each with an icon and title.
Step 4: Handling Navigation Item Clicks
Now, we need to handle the clicks on the navigation items. Open the MainActivity.java file and add the following code:
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import com.google.android.material.navigation.NavigationView;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
new HomeFragment()).commit();
navigationView.setCheckedItem(R.id.nav_home);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
new HomeFragment()).commit();
break;
case R.id.nav_profile:
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
new ProfileFragment()).commit();
break;
case R.id.nav_settings:
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
new SettingsFragment()).commit();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
}
This code sets up the Navigation Drawer and handles item clicks by replacing the content frame with different fragments.
Step 5: Creating Fragments
Lastly, create the fragments for each navigation item. For simplicity, create three new fragment classes: HomeFragment, ProfileFragment, and SettingsFragment. Each fragment should have a simple layout file. Below is an example for HomeFragment:
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);
}
}
Similarly, create ProfileFragment and SettingsFragment with their respective layouts.
Conclusion
By following these steps, you will have a fully functional Navigation Drawer in your Android app. This UI pattern greatly enhances the user experience by providing easy and intuitive navigation.
