Search code examples
androidscrollviewnavigation-drawer

ScrollView in content of DrawerLayout prevents the drawer to be opened by swiping


When I put ScrollView into the content of a DrawerLayout, I am nolonger able to open the drawer by swiping from the side.

Activity layout:

<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">
<!-- The menu_main content view -->
<FrameLayout
        android:id="@android:id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
<!-- The navigation drawer -->
<ListView
        android:name="com.gumtree.androidapp.DrawerFragment"
        android:id="@+id/drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start" />
</android.support.v4.widget.DrawerLayout>

In Activity's onCreate I add a fragment which has following layout:

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

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

    <ImageView
            android:layout_height="160dp"
            android:layout_width="match_parent"/>

    <TextView
            android:id="@+id/headline"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="@dimen/headline_text_size"
            android:padding="@dimen/detail_text_padding"
            android:textIsSelectable="false"/>

    <TextView
            android:id="@+id/description"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="@dimen/description_text_size"
            android:padding="@dimen/detail_text_padding"
            android:textIsSelectable="false"/>


</LinearLayout>
</ScrollView>

Without the ScrollView everything works fine and I am able to open the drawer by swiping from the side. However when I add the ScrollView, it stops working.


Solution

  • The problem here was silly named ID of FrameLayout used as content container of DrawerLayout. I used system ID (android.R.id.content) which caused that the content fragment was put on the top of all other views - even the drawer.

    It also caused fragment's layout to overlap the drawer and - related to this question - blocked the drawer from receiving touch events. The touch events were taken by fragment's ScrollView.

    Conclusion: DO NOT USE SYSTEM IDs (android.R.*) WHERE IT IS NOT NEEDED.

    I just wanted it to look nice and clean.. Silly me :)