如何使用 header 滚动使 android 导航抽屉 scroll-able

How to make android navigation drawer scroll-able with header Scroll

我想制作一个自定义导航抽屉,我希望它是 scroll-able。

这是我的布局。我以不同的方式尝试过。 但它只滚动列表项而不是 header 。那么我怎样才能让它成为整个导航抽屉(包括 header )scroll-able.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_scrollFlags="scroll|enterAlways"
    android:background="@drawable/bg_parent_rounded_corner"

    tools:context="com.ajkerdeal.app.Fragments.HomeCategoryFragment"
    android:weightSum="1">

    <LinearLayout
        app:layout_scrollFlags="scroll|enterAlways"
        android:id="@+id/line1"
        android:layout_width="match_parent"
        android:layout_height="160dp"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:background="@drawable/splash_background3"
        android:gravity="bottom"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:theme="@style/ThemeOverlay.AppCompat.Dark">


        <com.pkmmte.view.CircularImageView

            android:id="@+id/imageView"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:src="@drawable/sample_portrait"
            app:border="true"
            app:border_color="#EEEEEE"
            app:border_width="4dp"
            app:shadow="true" />



        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/nav_header_vertical_spacing"
            android:text="Ehsanul Hauque"
            android:textColor="#000000"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

        <TextView
            android:textColor="#000000"

            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ehsan@gmail.com" />

    </LinearLayout>


    <TextView


        android:background="#D8D8D8"
        android:gravity="center_vertical"
       android:paddingLeft="20dp"

        android:layout_width="409dp"
        android:layout_height="wrap_content"
        android:text="হোম"
        android:textStyle="bold"



        android:id="@+id/textView2"
         />




    <LinearLayout

        app:layout_scrollFlags="scroll|enterAlways"
        android:paddingTop="178dp"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:weightSum="1">




        <android.support.v7.widget.RecyclerView
            android:id="@+id/my_recycler_view_from_homecategoryfragment"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:onClick="viewClick"
            android:layout_height="wrap_content"

            android:clickable="true"
            android:focusable="true" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPostalAddress"
            android:ems="10"
            android:id="@+id/editText" />


    </LinearLayout>




</RelativeLayout>

您可以通过两个选项使抽屉式导航栏可滚动。

1.You 可以将所有内容都放在 ScrollView 中,这样整个页面就会根据设备开始滚动 size.So 只需使用 ScrollView 作为根 layout.I 我在下面发布了一个演示代码.

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/login_bg"
android:fitsSystemWindows="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/login_bg"
    android:orientation="vertical"
    android:padding="35dp"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"/>

2.Or您可以根据需要使用 ListView 或 RecyclerView 使内容部分滚动。

但由于您希望整个页面滚动,包括页眉部分,我建议您遵循第一个 option.Hope 会有帮助。

将您的全部内容放入 scrollview

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_parent_rounded_corner"
        android:orientation="vertical"
        android:weightSum="1"
        app:layout_scrollFlags="scroll|enterAlways"
        tools:context="com.ajkerdeal.app.Fragments.HomeCategoryFragment">

        <LinearLayout
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/line1"
            android:layout_width="match_parent"
            android:layout_height="160dp"
            android:background="@drawable/splash_background3"
            android:gravity="bottom"
            android:orientation="vertical"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:theme="@style/ThemeOverlay.AppCompat.Dark"
            app:layout_scrollFlags="scroll|enterAlways">

            <com.pkmmte.view.CircularImageView
                android:id="@+id/imageView"
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:src="@drawable/sample_portrait"
                app:border="true"
                app:border_color="#EEEEEE"
                app:border_width="4dp"
                app:shadow="true" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="@dimen/nav_header_vertical_spacing"
                android:text="Ehsanul Hauque"
                android:textAppearance="@style/TextAppearance.AppCompat.Body1"
                android:textColor="#000000" />

            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ehsan@gmail.com"
                android:textColor="#000000" />
        </LinearLayout>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="409dp"
            android:layout_height="wrap_content"
            android:background="#D8D8D8"
            android:gravity="center_vertical"
            android:paddingLeft="20dp"
            android:text="হোম"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:orientation="vertical"
            android:paddingTop="178dp"
            android:weightSum="1"
            app:layout_scrollFlags="scroll|enterAlways">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/my_recycler_view_from_homecategoryfragment"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:focusable="true"
                android:onClick="viewClick"
                android:scrollbars="vertical" />

            <EditText
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPostalAddress" />

        </LinearLayout>
    </RelativeLayout>
</ScrollView>

将此添加到您的 NavigationView XML 文件

android:scrollbarAlwaysDrawVerticalTrack="true";