Skip to main content

Add Image in Navigation Drawer Android Studio Template

I have to add Image in one of my project in slider Menu ,
I have used Android Studio Template Navigation Drawer  for material design .
For adding header on top of the list I have modified few lines in code: below are the simple steps:

Create an Android Studio project and select  Navigation Drawer Activity as shown below
Now your project structure is like this:


Now open activity_main.xml  and add LinearLayout and image view as shown below highlighted lines


<android.support.v4.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">
 <FrameLayout android:id="@+id/container" android:layout_width="match_parent"

    android:layout_height="match_parent" />


<LinearLayout    android:layout_width="@dimen/navigation_drawer_width"    android:layout_height="match_parent"    android:orientation="vertical"    android:layout_gravity="start"    android:id="@+id/slider_list_with_image"    >

<ImageView    android:layout_width="match_parent"    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher">
</ImageView>


<fragment android:id="@+id/navigation_drawer"    android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent"    android:layout_gravity="start"    android:name="com.naushad.navigationdrawersliderimage.NavigationDrawerFragment"    tools:layout="@layout/fragment_navigation_drawer" />

</LinearLayout>

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

Now open NavigationDrawerFragment.java and modify highlighted lines
  
public class NavigationDrawerFragment extends Fragment {

private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
  
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";

private NavigationDrawerCallbacks mCallbacks;

private ActionBarDrawerToggle mDrawerToggle;

    private DrawerLayout mDrawerLayout;
    private ListView mDrawerListView;
    //private View mFragmentContainerView;
   //Replace it whereever it used in this class with linear layout    

    private LinearLayout mlinearLayout;

    private int mCurrentSelectedPosition = 0;
    private boolean mFromSavedInstanceState;
    private boolean mUserLearnedDrawer;

    public NavigationDrawerFragment() {
    }

    @Override    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
        mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);

        if (savedInstanceState != null) {
            mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
            mFromSavedInstanceState = true;
        }

        // Select either the default item (0) or the last selected item.        
        selectItem(mCurrentSelectedPosition);
    }

    @Override    
     public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override    
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);
        mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override            
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                selectItem(position);
            }
        });
        mDrawerListView.setAdapter(new ArrayAdapter(
                getActionBar().getThemedContext(),
                android.R.layout.simple_list_item_activated_1,
                android.R.id.text1,
                new String[]{
                        getString(R.string.title_section1),
                        getString(R.string.title_section2),
                        getString(R.string.title_section3),
                }));
        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
        return mDrawerListView;
    }

    public boolean isDrawerOpen() {
   return mDrawerLayout != null && 
      mDrawerLayout.isDrawerOpen(mlinearLayout);
     //*** MODIFIED by Naushad        
     //mDrawerLayout.isDrawerOpen(mFragmentContainerView);
    }

    public void setUp(int fragmentId, DrawerLayout drawerLayout) {
        //mFragmentContainerView = getActivity().findViewById(fragmentId);
        //*** MODIFIED by Naushad        
        mlinearLayout=(LinearLayout)getActivity().findViewById(R.id.slider_list_with_image);
        mDrawerLayout = drawerLayout;
       // set a custom shadow that overlays the main content when the drawer opens                  

      mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
        // set up the drawer's list view with items and click listener
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);

          mDrawerToggle = new ActionBarDrawerToggle(
                getActivity(),                                 
               mDrawerLayout,                                  
              R.drawable.ic_drawer,            
               R.string.navigation_drawer_open,  
                R.string.navigation_drawer_close) {
            @Override            
             public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (!isAdded()) {
                    return;
                }

                getActivity().supportInvalidateOptionsMenu(); 
               // calls onPrepareOptionsMenu()            
             }

            @Override            
             public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (!isAdded()) {
                    return;
                }

                if (!mUserLearnedDrawer) {
                           
                    mUserLearnedDrawer = true;
                    SharedPreferences sp = PreferenceManager
                            .getDefaultSharedPreferences(getActivity());
                    sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
                }

                getActivity().supportInvalidateOptionsMenu(); 
               // calls onPrepareOptionsMenu()            
           }
        };
 
        if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
            //mDrawerLayout.openDrawer(mFragmentContainerView); 
           //***MODIFIED by Naushad                     
              mDrawerLayout.openDrawer(mlinearLayout);
        }

           mDrawerLayout.post(new Runnable() {
            @Override            
            public void run() {
                mDrawerToggle.syncState();
            }
        });

        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }

    private void selectItem(int position) {
        mCurrentSelectedPosition = position;
        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }
        if (mDrawerLayout != null) {
           // mDrawerLayout.closeDrawer(mFragmentContainerView);  
           //*** MODIFIED by Naushad               
          mDrawerLayout.closeDrawer(mlinearLayout);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }
    }

    @Override    
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mCallbacks = (NavigationDrawerCallbacks) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
        }
    }

    @Override    public void onDetach() {
        super.onDetach();
        mCallbacks = null;
    }

    @Override    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
    }

    @Override    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Forward the new configuration the drawer toggle component.        
       mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override    
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        
     if (mDrawerLayout != null && isDrawerOpen()) {
            inflater.inflate(R.menu.global, menu);
            showGlobalContextActionBar();
        }
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override    public boolean onOptionsItemSelected(MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        if (item.getItemId() == R.id.action_example) {
            Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

     private void showGlobalContextActionBar() {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setTitle(R.string.app_name);
    }

    private ActionBar getActionBar() {
        return ((ActionBarActivity) getActivity()).getSupportActionBar();
    }

   public static interface NavigationDrawerCallbacks {
            void onNavigationDrawerItemSelected(int position);
    }
}


Thats it here is the output :) make sure you have image in drawable folder You can get the source code from github here is the link

Comments

Popular posts from this blog

Using GIT with Android Studio on windows with terminal or toolbar

Today We are going to learn how we can create a git repository using android studio.
Android Studio Makes it very simple just follow the below steps and your project is on git :
First we setup our PC ::

Download git from :http://git-scm.com/download/win

install it.

for git repository online I am using Bitbucket  , bitbucket allow us to host private repository free you can also use github but your project should be public if you want to use it free.

Here I am going to use bitbucket:
Create repository
After creating repository  you will see screen like this


Now open AndroidStudio Create new project.
after creating the project clcik on VCS on menu strip  and enable git as shown below

Now your project git enabled ;
You can see terminal in andoid studio we can use it for git commands.
Now check terminal and write git status if it  give you below message :
'git' is not recognized as an internal or external command, operable program or batch file.
then you have to follow below steps …

[Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.] Error: /Users/Naushad/IonicProjects/IonicApp/platforms/android/cordova/build: Command failed with exit code 2 at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23) at ChildProcess.emit (events.js:98:17) at maybeClose (child_process.js:766:16) at Process.ChildProcess._handle.onexit (child_process.js:833:5)

sudo ionic build android
[Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.] Error: /Users/Naushad/IonicProjects/IonicApp/platforms/android/cordova/build: Command failed with exit code 2     at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)     at ChildProcess.emit (events.js:98:17)     at maybeClose (child_process.js:766:16)     at Process.ChildProcess._handle.onexit (child_process.js:833:5)
to solve this i use following steps in terminal :
sudo chown -R Naushad /usr/local/lib/node_modules/cordova
still have same error than i do follwing step
export PATH=$PATH:/users/Naushad/android-sdks/tools  then i got below error  :) [Error: Please install Android target: "android-22".
Hint: Open the SDK manager by running: /users/Naushad/android-sdks/tools/android You will require: 1. "SDK Platform" for android-22 2. "Android SDK Plat…