1

I am using navigation menu in my drawer layout. I have header layout and menu layout. This is my code.

Navigation.xml

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view_staff"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home_staff"
        app:itemIconTint="#fa32a4"
        app:itemTextColor="#212121"
        app:menu="@menu/activity_home_staff_drawer" >

menu.xml.Even I try to give all menus in header layout and give scrollview but whole header scrolling, I want to scroll only menus

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_dashboard_staff"
            android:icon="@drawable/dashboard"
            android:title="Dashboard" />
        <item
            android:id="@+id/nav_students_staff"
            android:icon="@drawable/teachers"
            android:title="Students" />
        <item
            android:id="@+id/nav_attendance_staff"
            android:icon="@drawable/attendance"
            android:title="Attendance" />
        <item

            android:id="@+id/nav_timetable_staff"
            android:icon="@drawable/calendericon"
            android:title="Timetable" />
        <item

            android:id="@+id/nav_class_attendance_staff"
            android:icon="@drawable/attendance"
            android:title="Class Attendance" />

        <item
            android:id="@+id/nav_consumablity"
            android:icon="@drawable/attendance"
            android:title="Consumability" />
        <item
            android:id="@+id/nav_lessonplan"
            android:icon="@drawable/accounts"
            android:title="Lesson Plan" />
    </group>

 <!--   <item
        android:background="#000"
        android:title="">
        <menu>
            <item
                android:title="" />
            <item
                android:background="#000"
                android:id="@+id/nav_send5"
                android:icon="@drawable/icon_white"
                android:title="Powerd by SchoolWyse" />
        </menu>
    </item>-->

</menu>
K.Dᴀᴠɪs
  • 9,945
  • 11
  • 33
  • 43
kalai vani
  • 289
  • 2
  • 4
  • 21
  • possible duplicate https://stackoverflow.com/questions/30936493/android-navigation-view-scroll-the-menu-items-only-issue – duggu Feb 22 '18 at 08:08
  • It's available in AndroidStudio. Just follow these steps: Right Click on a package -> New -> Activity -> Navigation Drawer Activity – Hai Hack Feb 22 '18 at 08:24
  • Possible duplicate of [Android Navigation view: Scroll the menu items only issue](https://stackoverflow.com/questions/30936493/android-navigation-view-scroll-the-menu-items-only-issue) – L. Guthardt Feb 22 '18 at 08:26

1 Answers1

0

You can try with ListView inside NavigationView for getting this done. You may need to add the listview items by inflating the elements.

<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"
android:fitsSystemWindows="true"
tools:openDrawer="start">


<!-- The navigation drawer -->
<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_gravity="start"
    android:background="@color/colorPrimaryDark"
    android:fitsSystemWindows="true">

    <ListView
        android:id="@+id/navList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/profileBox"
        android:background="@color/colorPrimaryDark"
        android:choiceMode="singleChoice" />
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

Adapter for reference:

public class DrawerListAdapter extends BaseAdapter {

Context mContext;
ArrayList<NavItem> mNavItems;

public DrawerListAdapter(Context context, ArrayList<NavItem> navItems) {
    mContext = context;
    mNavItems = navItems;
}

@Override
public int getCount() {
    return mNavItems.size();
}

@Override
public Object getItem(int position) {
    return mNavItems.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.drawer_item, null);
    }
    else {
        view = convertView;
    }

    TextView titleView = view.findViewById(R.id.title);
    TextView subtitleView = view.findViewById(R.id.subTitle);
    ImageView iconView = view.findViewById(R.id.icon);

    titleView.setText( mNavItems.get(position).mTitle );
    subtitleView.setText( mNavItems.get(position).mSubtitle );
    iconView.setImageResource(mNavItems.get(position).mIcon);

    return view;
}

}

You can use addHeaderView to add the header part.

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.navList);
adapter = new DrawerListAdapter(this, mNavItems);
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.nav_header_menu, mDrawerList, false);
mDrawerList.addHeaderView(header, null, false);
mDrawerList.setAdapter(adapter);
Rino
  • 1,215
  • 1
  • 16
  • 28