22

I need to have a ViewPager inside a ScrollView but ViewPager just does not appear when it's in ScrollView, everything is ok when i don't use ScrollView.

I've seen a couple questions like this being asked here on stackoverflow or on other sites and all of them have been answered that you have to put android:fillViewport="true" to your scrollview to fix the problem, but this solution doesnt work for me, ViewPager still does not appear even if i have android:fillViewport="true" in my ScrollView.

I guess something got changed in the android api's or something and this solution doesn't work anymore, does anyone know how i could possibly make a ViewPager appear in a ScrollView?

UPDATE: A working ScrollView layout XML:

<ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/itemsViewPager2" android:layout_width="fill_parent" android:layout_height="wrap_content" > </android.support.v4.view.ViewPager> </LinearLayout> </ScrollView> 
4
  • 1
    You should provide more info about your problem. The layout you're currently trying to get this to work for example. Have you tried defining an exact pixel value for the height of the ViewPager? Commented Jan 27, 2012 at 15:02
  • Wow, thanks for the idea, i played a bit with height and width attributes and actually made it to work pretty easily, updated original question with scrollview XML layout that works. Commented Jan 27, 2012 at 15:25
  • @boogieman please put in as answer and mark it so. Commented Oct 12, 2012 at 7:50
  • You can find the solution [here][1] [1]: stackoverflow.com/questions/2646028/… Commented Nov 26, 2012 at 5:12

4 Answers 4

17

I ran into a similar problem in the past. A View-Pager must have a set height (it cannot wrap-content). Since a ViewPager loads separate pages, and not all at once, it won't know what 'wrap-content' actually means. Setting the layout_height to fill_parent or a set dp allows the ViewPager to statically set it's height and react more accordingly within other layouts.

Sign up to request clarification or add additional context in comments.

1 Comment

The only thing that worked was explicitly setting a value in dp. Even match_parent didn't work.
9
public class YourScrollableViewPager extends ViewPager { private static final int MATCH_PARENT = 1073742592; private int currentPageNumber; private int pageCount; public YourScrollableViewPager(Context context) { super(context); prepareUI(); } public YourScrollableViewPager(Context context, AttributeSet attrs) { super(context, attrs); prepareUI(); } private void prepareUI() { setOffscreenPageLimit(pageCount); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; if (getChildCount() != 0) { View child = getChildAt(currentPageNumber); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if (h > height) height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void onPrevPage() { onMeasure(MATCH_PARENT, 0); } public void onNextPage() { onMeasure(MATCH_PARENT, 0); }} 

1 Comment

Thanks, it works for me. But I faced with some issue. I have 2 fragments at view pager. One have NestedScrollView and the other one have RecyclerView. So with that code fling is broken at RecyclerView.
2

I found solution for mine using "HorizontalScrollView" instead of ScrollView.

First create activity_main.xml with below code, where you define ViewPager.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

And later create another left.xml for defining your HorizontalScrollView :

 <?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res /android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/ic_launcher" /> </HorizontalScrollView> 

Comments

-2

Just add the android:fillViewport="true" to your scroll view it will work

1 Comment

Please read the question before answering. He already mentioned that it doesn't work for him.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.