ScrollView inside ScrollView Scrolling problem

While designing rich layouts you might need to use two scrollview in your app.
Well ideally its not advised to use two scrollview in a view. So try to avoid it.

Why this problem occurs ? :

When you put two scrollview android just get confused which scroll view is touched. So sometimes it gets unable to deliver touch event.

But even if the requirement forces you to make such layouts. Try this…

Say case is somewhat like this….

<ScrollView android:id=”@+id/parent_scroll”
            android:layout_width=”fill_parent”
            android:layout_height=”wrap_content”
            android:layout_weight=”1″
            android:background=”@drawable/dotted_bg”
            android:focusableInTouchMode=”false”>
                        <LinearLayout   />
                        <LinearLayout   />
                        <LinearLayout  >
                        <ScrollView android:id=”@+id/child_scroll”  
                        android:layout_width=”fill_parent”
                        android:layout_height=”fill_parent”
                        android:background=”@drawable/text_box_bg”>
                    <TextView android:id=”@+id/text_description”
                        android:layout_width=”fill_parent”
                        android:layout_height=”fill_parent”
                        android:textColor=”@color/gray”
                        android:textSize=”12dip”
                        android:padding=”5dip”
                        android:scrollbars=”vertical”/>
                    <!–ScrollView>
                  </LinearLayout>
</ScrollView>

Step 1 : Provide unique id to both the scrollview.
Step 2 : get reference of that two scrollview in your activity.

     parentScroll=(ScrollView)findViewById(R.id.parent_scroll);
     childScroll=(ScrollView)findViewById(R.id.child_scroll);

Step 3: Now set touch listeners for both.

            parentScroll.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    Log.v(TAG,”PARENT TOUCH”);
                    findViewById(R.id.child_scroll).getParent().requestDisallowInterceptTouchEvent(false);
                    return false;
                }
            });
            childScroll.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event)
                {
                    Log.v(TAG,”CHILD TOUCH”);
                                        // Disallow the touch request for parent scroll on touch of child view
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    return false;
                }
            });

Done …

38 Comments

  1. This is very interesting! Great information and it is also very well written. I will bookmark and comeback soon.

    • satellitemundo

      Keep visiting for more… You can mail me your queries too.

      • Kamaldeep Singh

        Can you just send me a sample project where it is working fine because I am getting exception ….

        • satellitemundo

          Actually I dnt have any working example. This snippet is part of one of my project. But you can send me your project. I will resolve your error and give back to you. :)

  2. Anal Trivedi

    Thanks Hardik

    • satellitemundo

      Mention Not Anal, You can write me on hardik.trivedi_11@yahoo.com if you are having any doubts in android. keep visiting.

  3. Girish

    Thanks a lot. That solved my problem of scrolling textview inside scrollview. Was scratching my head to get this working. Didn’t find this info anywhere else. Thanks again

    • satellitemundo

      wc :)

  4. This informative article was definitely a really wonderful examine. My partner and i was impressed through the items of the post. I cannot wait to see what in addition you’ve waiting for you for individuals. We are surely getting excited about your next article. Cheers with regard to revealing!

  5. Thanks , I’ve recently been searching for information about this subject for ages and yours is the best I have discovered till now. But, what about the conclusion? Are you sure about the source?

  6. Saggy

    THANKS A TON!

    I had exactly the same problem and your solution solved it. God bless you! :-)

  7. cppdev

    Hi Hardik,

    This approach is not working for me. If I use the same layout as you have described, it throws an exception saying java.lang.IllegalStateException: ScrollView can host only one direct child. I am working on Jelly Bean SDK.

    Please let me know if I am doing anything wrong.

    • Hardik Trivedi

      Hi,

      Yes you can not use more than one direct child for scrollview.
      Means your scrollview should not be like

      But it should be

  8. Laith

    Thanks, that was really awsome

    • Hardik Trivedi

      Thanks Laith

  9. vahid

    Thank you for your article, it is perfect.

    • Hardik Trivedi

      Thanks Vahid.

  10. I wonder why it took me hours of searching on google to find your brilliant post. Works like a charm!

    • Hardik Trivedi

      Thanks buddy for the comment. Keep Visiting :)

  11. works totally fine ,thanks :)

    • Hardik Trivedi

      Welcome Kartik :)

  12. Lynn Gobin

    Thanks much for helping me solve a problem with a scrollable TextView within a ScrollView!

    • Hardik Trivedi

      Welcome :)

  13. Developer

    Thanks much, this is simply great.

    • Hardik Trivedi

      Yea. Thanks :)

  14. Gideon

    Thank You, this was very helpful !

    • Hardik Trivedi

      Welcome :)

  15. Jules

    You are a superstar! Many thanks for that!

    • Hardik Trivedi

      Ha ha,
      Keep Visiting the blog, and let live the stardom ;)

  16. Kets

    Hi.. I need to use a ScrollView inside a ListView. So that, whenever I scroll the screen the whole layout should scroll including EditText.

    My layout looks like

    Could you please suggest me the way to use parent scroll rather then list scroll.

    • Kets
    • Hardik Trivedi

      ScrollView should not have a listview as a child. Totally wrong approach.

      • Kets

        I have to do it forcefully.
        I am trying with your solution to scroll Listview and EditText simultaneously. Could you please guide me, will it work for me or not?

        • Hardik Trivedi

          Umm…. Can you send me that class and layout file or any needed things. And mention your problem in detail.
          Mail me on hardik.trivedi_11@yahoo.com

  17. laxmi

    thanks for the code :)

    • Hardik Trivedi

      :D You are welcome

  18. Muthu Lalapet

    Thank you very much. This helped me a lot

    • Hardik Trivedi

      Thanks Muthu

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: