Best way of implementing a scrolling navigation drawer
original source : https://stackoverflow.com/questions/30084530/best-way-of-implementing-a-scrolling-navigation-drawer
https://stackoverflow.com/a/39191046/3151712
Implementing scrollable Navigation Drawer using android.support.v4.widget.DrawerLayout and NavigationView could be even simpler than it is described at: http://android-developers.blogspot.ru/2015/05/android-design-support-library.html
That article suggests adding each element of your application’s Navigation Drawer as a Menu Item. This is cool and definitely a way to go for most of developers. But what if you already has a Navigation Drawer implemented inside e.g. Linear Layout?
It appears that you can easily make your old good layout scrollable: just set it as a “app:headerLayout” of the NavigationView. No more changes are needed! So, in a final solution you will have:
A layout of your Activity, similar to the above blog post, but without an “app:menu=”@menu/drawer" attribute e.g. this:
<android.support.v4.widget.DrawerLayout
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"
android:fitsSystemWindows="true">
<!-- your content layout -->
<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
/>
</android.support.v4.widget.DrawerLayout>
And a layout for all your old Drawer content in the “drawer_header.xml” file, migrated without any changes to this scrollable Drawer, E.g. this:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:orientation="vertical">
<TextView
android:id="@+id/myFirstButton"
android:onClick="onMyFirstButtonClick"
android:text="@string/my_first_button_title"/>
<TextView
android:id="@+id/goToTheTopButton"
android:onClick="onGoToTheTopButtonClick"
android:text="@string/go_to_the_top_title"/>
<View style="@style/Divider"/>
<!-- Some other "menu items" -->
</LinearLayout>
For full working example see this activity layout: https://github.com/andstatus/andstatus/blob/master/app/src/main/res/layout/timeline.xml and this commit, where I migrated to a scrollable Navigation Drawer: https://github.com/andstatus/andstatus/commit/a80b299de714bdd65cacb138ffb31adc3ea23a98