Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DrawerLayout Not Scrolling

Tags:

android

I notice that the drawers within the Google applications are scrollable, but I cannot for some reason come to the conclusion of how to achieve a scrollable DrawerLayout. I attempted to construct the layout file with the following design paradigm.

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

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mainScreen">
    <!-- Layout of Activity -->
  </FrameLayout>

  <!-- DrawerLayout segment -->
  <ScrollView
     android:id="@+id/scrollView"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <LinearLayout
      android:id="@+id/drawerLinearLayout"
      android:orientation="vertical"
      android:layout_width="260dp"
      android:layout_height="match_parent"
      android:layout_gravity="start|bottom"
      android:layout_marginTop="?android:attr/actionBarSize"
      android:divider="@android:color/transparent"
      android:dividerHeight="0dp"
      android:background="#77000000">
     <!-- Layout of Drawer -->
     </LinearLayout>
   </ScrollView>
 </android.support.v4.widget.DrawerLayout>

But, with or without the ScrollView, the drawer just cuts items off at the bottom when they go beyond the end of the screen. I can't get any form of scrolling enabled. Not sure what I am missing or need to enable. Thoughts would be appreciated.

The LinearLayout in the DrawerLayout segment contains different styled views. One view displays title only with a divider below it, one displays an imageview with text next to it and another displays a title with a switch built into the row. So, multiple styled views need to be accounted for if done outside of XML coded layout files.

like image 539
Jay Snayder Avatar asked Jan 12 '23 02:01

Jay Snayder


1 Answers

While using a ListView is a valid option, it was useful for me to attempt and resolve the situation for which I already had such a large XML file constructed for my layout in between the ScrollView above. As it turned out, there were only a few small modifications needed in order to get it working as intended. The latest layout file constructed is the following:

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

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mainScreen">
    <!-- Layout of Activity -->
  </FrameLayout>

  <!-- DrawerLayout segment -->
  <ScrollView
     android:id="@+id/scrollView"
     android:layout_width="260dp"
     android:layout_height="match_parent"
     android:layout_gravity="start|bottom"
     android:layout_marginTop="?android:attr/actionBarSize">
     <LinearLayout
      android:id="@+id/drawerLinearLayout"
      android:orientation="vertical"
      android:layout_width="260dp"
      android:layout_height="wrap_content"
      android:divider="@android:color/transparent"
      android:dividerHeight="0dp"
      android:background="#77000000">
     <!-- Layout of Drawer -->
     </LinearLayout>
   </ScrollView>
 </android.support.v4.widget.DrawerLayout>

The main modifications required me to alter where the gravity and the margin existed. The gravity needed to be in the surrounding ScrollView otherwise it would cause odd behavior that didn't scroll or actually crashed in some instances apparently. Then the inner layout needed to be changed to 'wrap content'.

If the margin was not moved into the ScrollView as well, it apparently doesn't scroll down to the bottom. It left a margin of scroll unscrolled at the bottom. Once this was resolved, the DrawerLayout worked as was expected at this point. The ListView option also proposed is another approach to be used, but as mentioned at this point it was worth me analyzing it a bit further to re-use the code that I already had written; especially with several different custom views that would need to be handled inside the view.

like image 102
Jay Snayder Avatar answered Jan 18 '23 14:01

Jay Snayder