如何使用标题 Scroll 使 android 导航抽屉可滚动

Posted

技术标签:

【中文标题】如何使用标题 Scroll 使 android 导航抽屉可滚动【英文标题】:How to make android navigation drawer scroll-able with header Scroll 【发布时间】:2016-04-15 08:53:08 【问题描述】:

我想在我希望它可以滚动的地方制作一个自定义导航抽屉。

这是我的布局。我以不同的方式尝试过。 但它只滚动列表项而不是标题。所以我怎样才能让它整个导航抽屉(包括标题)滚动。

<?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_
    android:layout_
    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_
        android:layout_
        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_
            android:layout_
            android:src="@drawable/sample_portrait"
            app:border="true"
            app:border_color="#EEEEEE"
            app:border_
            app:shadow="true" />



        <TextView
            android:layout_
            android:layout_
            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_
            android:layout_
            android:text="ehsan@gmail.com" />

    </LinearLayout>


    <TextView


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

        android:layout_
        android:layout_
        android:text="হোম"
        android:textStyle="bold"



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




    <LinearLayout

        app:layout_scrollFlags="scroll|enterAlways"
        android:paddingTop="178dp"
        android:orientation="vertical"
        android:layout_
        android:layout_
        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_
            android:onClick="viewClick"
            android:layout_

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

        <EditText
            android:layout_
            android:layout_
            android:inputType="textPostalAddress"
            android:ems="10"
            android:id="@+id/editText" />


    </LinearLayout>




</RelativeLayout>

【问题讨论】:

ScrollView 设置为根视图并将RelativeLayout 放入其中 github.com/rudsonlive/NavigationDrawer-MaterialDesign 【参考方案1】:

您可以使用两个选项来使导航抽屉可滚动。

1.你可以把所有东西都放在一个 ScrollView 里面,这样整个页面就会根据设备大小开始滚动。所以只需使用 ScrollView 作为根布局。我在下面发布一个演示代码。

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

<LinearLayout
    android:layout_
    android:layout_
    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.或者您可以根据您的要求使用 ListView 或 RecyclerView 使内容部分滚动。

但是由于您希望整个页面滚动,包括标题部分,我建议您遵循第一个选项。希望它会有所帮助。

【讨论】:

【参考方案2】:

将您的全部内容放入scrollview

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

    <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_
        android:layout_
        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_
            android:layout_
            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_
                android:layout_
                android:src="@drawable/sample_portrait"
                app:border="true"
                app:border_color="#EEEEEE"
                app:border_
                app:shadow="true" />

            <TextView
                android:layout_
                android:layout_
                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_
                android:layout_
                android:text="ehsan@gmail.com"
                android:textColor="#000000" />
        </LinearLayout>

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

        <LinearLayout
            android:layout_
            android:layout_
            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_
                android:layout_
                android:clickable="true"
                android:focusable="true"
                android:onClick="viewClick"
                android:scrollbars="vertical" />

            <EditText
                android:id="@+id/editText"
                android:layout_
                android:layout_
                android:ems="10"
                android:inputType="textPostalAddress" />

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

【讨论】:

但是当我以这种方式滚动时,json数据列表被隐藏。整个布局改变了。 你尝试构建它并在模拟器或真实设备上运行吗?【参考方案3】:

将此添加到您的 NavigationView XML 文件中

android:scrollbarAlwaysDrawVerticalTrack="true";

【讨论】:

以上是关于如何使用标题 Scroll 使 android 导航抽屉可滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何使溢出自动在 Safari 上工作

android中带有Endless Listview Scroll的AsynTask

如何减慢 Scroll-Top Speed

Android 如何在进入有scrollView的页面时滑动条置顶

如何在 Xcode 项目中的 Scroll View 上无限滚动?

Android群英传笔记——第五章:Android Scroll分析