Android ScrollView不会在带有抽屉布局的活动中滚动

时间:2015-06-10 10:52:47

标签: android android-layout navigation-drawer android-scrollview drawerlayout

让我向您介绍我的活动:

<RelativeLayout
    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">

    <include
        android:id="@+id/toolbar_actionbar"
        layout="@layout/toolbar_default"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <FrameLayout
        android:id="@+id/main_fragment_container"
        android:layout_width="match_parent"
        android:layout_below="@+id/toolbar_actionbar"
        android:layout_height="match_parent"/>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar_actionbar">

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:clickable="true"
            android:layout_height="match_parent"/>

        <!-- android:layout_marginTop="?android:attr/actionBarSize"-->
        <fragment
            android:id="@+id/fragment_drawer"
            android:name="com.package.name.navigationdrawer.NavigationDrawerFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:layout="@layout/fragment_navigation_drawer"/>
    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

FrameLayout main_fragment_container 是我根据导航抽屉选择加载不同片段的地方但是当我加载带有ScrollView滚动的片段不起作用时,我可以在片段加载时看到滚动条指示仅此刻屏幕上有一小部分,但它永远不会滚动。我尝试了一些建议,提到将ScrollView包含在LinearLayout中,它没有任何区别。

我怀疑导航抽屉是&#34;拦截&#34;应该到达ScrollView的事件,但我不知道该怎么做。这是片段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:id="@+id/fragment_who_scrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/header_pic_s"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:text="TEEEEEST"
                android:gravity="center"
                android:padding="20dp"/>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

感谢您的时间。

更新 - 让我添加一些额外信息:

  • 这里的问题不在于ScrollView本身,而是在我的活动布局中,DrawerLayout在&#39;以上&#39; ScrollView阻止任何触摸事件到达ScrollView。如果我删除DrawerLayout,ScrollView滚动JUST FINE。

  • 同样,如果我在活动布局中将DrawrollLayout之后的ScrollView放在ScrollView中,那么DrawerLayout当然不会按预期工作,因为它必须在其他所有内容之上。

我希望我能够正确地解释自己,通过测试我确定问题是什么,但我不确定如何修复它,我对导航抽屉的经验有限,我不知道如何让scroll事件传递给ScrollView而不是让DrawerLayout拦截它。

4 个答案:

答案 0 :(得分:1)

您应该使用id&#34; main_fragment_container&#34;移动framelayout。在drawerlayoutout里面这样:

min-height: 100vh;

答案 1 :(得分:0)

尝试重新排列您的布局:

/root/logs

答案 2 :(得分:0)

感谢托马斯指导我的答案。

ScrollView所在的FrameLayout必须位于DrawerLayout 内才能滚动。我也放弃了另一个容器布局,因为它没有被使用。这就是活动的方式:

<RelativeLayout
    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">

    <include
        android:id="@+id/toolbar_actionbar"
        layout="@layout/toolbar_default"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar_actionbar">

        <FrameLayout
            android:id="@+id/main_fragment_container"
            android:layout_width="match_parent"
            android:layout_below="@+id/toolbar_actionbar"
            android:layout_height="match_parent"/>

        <!-- android:layout_marginTop="?android:attr/actionBarSize"-->
        <fragment
            android:id="@+id/fragment_drawer"
            android:name="com.package.name.navigationdrawer.NavigationDrawerFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:layout="@layout/fragment_navigation_drawer"/>
    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

答案 3 :(得分:0)

尝试在父版式中添加以下行为:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

我在DrawerLayout下的AppBarLayout中遇到了几乎类似的问题。这可能有效。