How add custom navigation view in Android

Viewed 40

I have created the layout as attached below, I haven't used any drawerlayout or navigation view. top bar is created using toolbar tag. Now I want to add a navigation view which will invoke once user clicks that hamburger icon. And it should be accessible from other activities as wellenter image description here

1 Answers
  1. You should use the navigation drawer.

  2. You can do this this by creating one common class named BaseActivity and put your code of navigation drawer in this class. and extend your classes/Activities with BaseActivity, where you want to show navigation drawer.

     public class BaseActivity extends AppCompatActivity  {
     public Toolbar toolbar;                             
     ActionBarDrawerToggle mDrawerToggle;
     Context context;
     private NavigationView navigationView;
     private DrawerLayout drawerLayout;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
     }
    
     protected boolean useToolbar() {
         return true;
     }
    
    
     @Override
     public void setContentView(int layoutResID) {
         context = this;
    
         DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.drawer_main, null);
         FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.frame);
         getLayoutInflater().inflate(layoutResID, activityContainer, true);
    
         super.setContentView(fullView);
         toolbar = (Toolbar) fullView.findViewById(R.id.tool_bar);
    
         setSupportActionBar(toolbar);
         getSupportActionBar().setTitle("");
         toolbar.setTitle("");
         this.getSupportActionBar().setElevation(0);
    
         getSupportActionBar().setLogo(R.drawable.ic_arrahm);
         //  toolbar.setLogo(R.drawable.ic_main);
         if (useToolbar()) {
             setSupportActionBar(toolbar);
             setTitle("Places Near Me");
         } else {
             toolbar.setVisibility(View.GONE);
         }
    
    
         //Initializing NavigationView
         navigationView = (NavigationView) findViewById(R.id.navigation_view);
    
         //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
         navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    
             // This method will trigger on item Click of navigation menu
             @Override
             public boolean onNavigationItemSelected(MenuItem menuItem) {
                 //Checking if the item is in checked state or not, if not make it in checked state
                 if (menuItem.isChecked()) menuItem.setChecked(false);
                 else menuItem.setChecked(true);
    
                 //Closing drawer on item click
                 drawerLayout.closeDrawers();
    
                 //Check to see which item was being clicked and perform appropriate action
                 switch (menuItem.getItemId()) {
                     case R.id.edit_profile:                   
                         return true;
                     case R.id.change_password:
                         return true;
                     default:
                         Toast.makeText(getApplicationContext(), "Work in progress", Toast.LENGTH_SHORT).show();
                         return true;
                 }
             }
         });
    
         // Initializing Drawer Layout and ActionBarToggle
         drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
         View header = navigationView.getHeaderView(0);
         TextView tvName = (TextView) header.findViewById(R.id.name);
         TextView tvEmail = (TextView) header.findViewById(R.id.email);
         String name = Preferences.getDataFromStringPreferences(context,Constants.USER_DETAILS, Constants.USER_NAME);
    
         if (name != null) {
             tvName.setText(name);
         }
    
    
         ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer) {
    
             @Override
             public void onDrawerClosed(View drawerView) {
                 // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank
                 super.onDrawerClosed(drawerView);
             }
    
             @Override
             public void onDrawerOpened(View drawerView) {
                 super.onDrawerOpened(drawerView);
             }
         };
    
         //Setting the actionbarToggle to drawer layout
         drawerLayout.setDrawerListener(actionBarDrawerToggle);
    
         //calling sync state is necessay or else your hamburger icon wont show up
         actionBarDrawerToggle.syncState();
     }
    
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         return super.onCreateOptionsMenu(menu);
     }
    
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         return super.onPrepareOptionsMenu(menu);
     }
    
     @Override
     protected void onPostCreate(Bundle savedInstanceState) {
         super.onPostCreate(savedInstanceState);
     }
    
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         int id = item.getItemId();
         return mDrawerToggle.onOptionsItemSelected(item);
     }
    

    }

create drawer_main.xml layout file

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/tool_bar"
            layout="@layout/toolbar" />

        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </FrameLayout>

    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/drawer">


    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

create toolbar.xml under layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    >
</android.support.v7.widget.Toolbar>

create drawer_header.xml layout resource file

<?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="178dp"
    android:background="@color/colorPrimary"
    android:orientation="vertical"
    android:padding="20dp"
    android:weightSum="1">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="vertical">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:text=""
            android:textColor="#ffffff"
            android:textSize="14sp"
            android:textStyle="bold"

            />

        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:text=""

            android:textColor="#ffffff"
            android:textSize="14sp"
            android:textStyle="normal"

            />
    </LinearLayout>

    <ImageView
        android:id="@+id/circleView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_centerInParent="true"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="30dp" />
</RelativeLayout>
Related