I made a ScrollView containing a ViewPager, but the ViewPager does not grow in height. When the content inside the ViewPager is too big, it get 'pucht'(?) inside, the table is the space that shrinks.
I have search for a solution and found that the problem is the wrap_content, when the ViewPager is loaded there is no content. So the ViewPager keeps the screen height. The solutions that I found are not for FragmentPagerAdapter, so i have edit this question.
Please point me in the right direction.
Greetings, Christophe VD.
The main layout is this, the timetable on the bottom is one of the problems:
 It needs more like this:
The FragmentPagerAdapter is:
import android.content.Context; import android.graphics.pdf.PdfDocument; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;  public class film_tabs_adapter extends FragmentPagerAdapter {     private final String[] TITLES = { "Info", "Comment", "Cast", "Muziek"};     String[] Film_Data;      public film_tabs_adapter(FragmentManager fm, String[] Film_Data_in) {         super(fm);         Film_Data = Film_Data_in;     }      @Override     public CharSequence getPageTitle(int position) {         return TITLES[position];     }       @Override     public int getCount() {         return 4;     }      @Override     public Fragment getItem(int position) {         Fragment fragment =null;         Bundle bundle = new Bundle();         bundle.putStringArray("Film_Data", Film_Data);         switch(position) {             case 0:                 //return new film_info();                 fragment = new film_info();                 fragment.setArguments(bundle);                 return fragment;             case 1:                 return new film_coment();             case 2:                 return new film_cast();             case 3:                 return new film_sound();             default:                 return new film_info();         }     }  } 
 And the class of the Fragment:
    import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView;  public class film_info extends Fragment {     TextView label_locatie;     ...     TableLayout TimeTabel;      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {         View view = inflater.inflate(R.layout.activity_film_info, container, false); // layout (activity_film_info) openen         Context context = inflater.getContext();         DatabaseVerwerker DB = new DatabaseVerwerker(context);         String[] Film_Data =  getArguments().getStringArray("Film_Data");         ...         return view;     }  } The Activity:
<?xml version="1.0" encoding="utf-8"?> <ScrollView     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:fillViewport="true"     android:layout_width="fill_parent"     android:layout_height="fill_parent">     <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="vertical">          <FrameLayout             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:layout_marginBottom="5dp"             android:id="@+id/header">              <FrameLayout                 android:layout_width="match_parent"                 android:layout_height="120dp">                  <ProgressBar                     style="?android:attr/progressBarStyleHorizontal"                     android:progressDrawable="@drawable/redprogressbar"                     android:layout_width="match_parent"                     android:layout_height="2dp"                     android:id="@+id/DownloadCover"                     android:layout_gravity="top" />                  <ImageView                     android:layout_width="match_parent"                     android:layout_height="match_parent"                     android:id="@+id/FilmCover"                     android:src="@drawable/cover"                     android:adjustViewBounds="true"                     android:padding="-5dp"                     android:scaleType="centerCrop" />              </FrameLayout>              <FrameLayout                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:layout_gravity="left|right|top"                 android:paddingLeft="7dp">                  <LinearLayout                     android:orientation="horizontal"                     android:layout_width="match_parent"                     android:layout_height="match_parent">                      <TableRow                         android:layout_width="wrap_content"                         android:layout_height="match_parent">                          <ImageView                             android:layout_width="82dp"                             android:layout_height="120dp"                             android:id="@+id/FilmPoster"                             android:src="@drawable/poster_x"                             android:adjustViewBounds="true"                             android:layout_gravity="bottom|left" />                     </TableRow>                      <TableRow                         android:layout_width="match_parent"                         android:layout_height="match_parent">                          <TextView                             android:layout_width="match_parent"                             android:layout_height="wrap_content"                             android:text="New Text"                             android:id="@+id/FilmTitel"                             android:textStyle="bold"                             android:gravity="center_horizontal"                             android:layout_marginTop="120dp" />                     </TableRow>                 </LinearLayout>              </FrameLayout>          </FrameLayout>          <FrameLayout             android:layout_width="fill_parent"             android:layout_height="wrap_content"             android:id="@+id/body">             <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                 xmlns:tools="http://schemas.android.com/tools"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 tools:context=".MainActivity" >                  <com.astuetz.PagerSlidingTabStrip                     android:id="@+id/tabs"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:background="#dadada"                     app:pstsShouldExpand="true"                     app:pstsDividerColor="#EDEDED"                     app:pstsIndicatorColor="#C3263E"                     app:pstsDividerPadding="10dp"                     app:pstsIndicatorHeight="4dp"                     app:pstsTabPaddingLeftRight="0dp"                     />                  <android.support.v4.view.ViewPager                     android:id="@+id/pager"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:layout_below="@+id/tabs"                     tools:context=".MainActivity"                     android:soundEffectsEnabled="false" />              </RelativeLayout>         </FrameLayout>     </LinearLayout> </ScrollView> The Fragment:
<?xml version="1.0" encoding="utf-8"?>     <FrameLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="999dp">          <LinearLayout             android:orientation="vertical"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:layout_marginTop="5dp">              <FrameLayout                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:paddingBottom="5dp"                 android:background="#dadada">                  <TableLayout                     android:layout_width="match_parent"                     android:layout_height="match_parent"                     android:stretchColumns="*">                      <TableRow                         android:layout_width="match_parent"                         android:layout_height="match_parent">                          <RelativeLayout                             android:layout_width="0dp"                             android:layout_height="wrap_content"                             android:layout_weight="1"                             android:layout_margin="4dp">                              <ImageView                                 android:layout_alignParentLeft="true"                                 android:layout_alignParentTop="true"                                 android:layout_width="30dp"                                 android:layout_height="32dp"                                 android:id="@+id/imageView3"                                 android:src="@drawable/icon_locatie"                                 android:layout_margin="2dp" />                              <TextView                                 android:layout_width="match_parent"                                 android:layout_height="wrap_content"                                 android:layout_alignBottom="@+id/imageView3"                                 android:layout_alignTop="@+id/imageView3"                                 android:layout_toRightOf="@+id/imageView3"                                 android:gravity="center_vertical"                                 android:text="Small Text"                                 android:id="@+id/label_locatie" />                          </RelativeLayout >                          <RelativeLayout                             android:layout_width="0dp"                             android:layout_height="wrap_content"                             android:layout_weight="1"                             android:layout_margin="4dp">                              <ImageView                                 android:layout_alignParentLeft="true"                                 android:layout_alignParentTop="true"                                 android:layout_width="30dp"                                 android:layout_height="32dp"                                 android:id="@+id/imageView4"                                 android:src="@drawable/icon_speelduur"                                 android:layout_margin="2dp" />                              <TextView                                 android:layout_width="match_parent"                                 android:layout_height="wrap_content"                                 android:layout_alignBottom="@+id/imageView4"                                 android:layout_alignTop="@+id/imageView4"                                 android:layout_toRightOf="@+id/imageView4"                                 android:gravity="center_vertical"                                 android:text="Small Text"                                 android:id="@+id/label_speelduur" />                         </RelativeLayout>                          <RelativeLayout                             android:layout_width="0dp"                             android:layout_height="wrap_content"                             android:layout_weight="1"                             android:layout_margin="4dp">                              <ImageView                                 android:layout_alignParentLeft="true"                                 android:layout_alignParentTop="true"                                 android:layout_width="30dp"                                 android:layout_height="32dp"                                 android:id="@+id/imageView5"                                 android:src="@drawable/icon_genre"                                 android:layout_margin="2dp" />                              <TextView                                 android:layout_width="match_parent"                                 android:layout_height="wrap_content"                                 android:layout_alignBottom="@+id/imageView5"                                 android:layout_alignTop="@+id/imageView5"                                 android:layout_toRightOf="@+id/imageView5"                                 android:gravity="center_vertical"                                 android:text="Small Text"                                 android:id="@+id/label_genre" />                         </RelativeLayout>                     </TableRow>                      <TableRow                         android:layout_width="match_parent"                         android:layout_height="match_parent">                          <RelativeLayout                             android:layout_width="0dp"                             android:layout_height="match_parent"                             android:layout_weight="1"                             android:layout_margin="4dp">                              <ImageView                                 android:layout_alignParentLeft="true"                                 android:layout_alignParentTop="true"                                 android:layout_width="30dp"                                 android:layout_height="32dp"                                 android:id="@+id/imageView6"                                 android:src="@drawable/icon_gesproken"                                 android:layout_margin="2dp" />                              <TextView                                 android:layout_width="match_parent"                                 android:layout_height="wrap_content"                                 android:layout_alignBottom="@+id/imageView6"                                 android:layout_alignTop="@+id/imageView6"                                 android:layout_toRightOf="@+id/imageView6"                                 android:gravity="center_vertical"                                 android:text="Small Text"                                 android:id="@+id/label_gesproken" />                         </RelativeLayout>                          <RelativeLayout                             android:layout_width="0dp"                             android:layout_height="match_parent"                             android:layout_weight="1"                             android:layout_margin="4dp">                              <ImageView                                 android:layout_alignParentLeft="true"                                 android:layout_alignParentTop="true"                                 android:layout_width="30dp"                                 android:layout_height="32dp"                                 android:id="@+id/imageView7"                                 android:src="@drawable/icon_versie"                                 android:layout_margin="2dp" />                              <TextView                                 android:layout_width="match_parent"                                 android:layout_height="wrap_content"                                 android:layout_alignBottom="@+id/imageView7"                                 android:layout_alignTop="@+id/imageView7"                                 android:layout_toRightOf="@+id/imageView7"                                 android:gravity="center_vertical"                                 android:text="Small Text"                                 android:id="@+id/label_versie" />                         </RelativeLayout>                          <RelativeLayout                             android:layout_width="0dp"                             android:layout_height="match_parent"                             android:layout_weight="1"                             android:layout_margin="4dp">                              <ImageView                                 android:layout_alignParentLeft="true"                                 android:layout_alignParentTop="true"                                 android:layout_width="30dp"                                 android:layout_height="32dp"                                 android:id="@+id/imageView8"                                 android:src="@drawable/icon_ondertiteling"                                 android:layout_margin="2dp" />                              <TextView                                 android:layout_width="match_parent"                                 android:layout_height="wrap_content"                                 android:layout_alignBottom="@+id/imageView8"                                 android:layout_alignTop="@+id/imageView8"                                 android:layout_toRightOf="@+id/imageView8"                                 android:gravity="center_vertical"                                 android:text="Small Text"                                 android:id="@+id/label_ondertiteling" />                         </RelativeLayout>                     </TableRow>                      <TableRow                         android:layout_width="match_parent"                         android:layout_height="match_parent"></TableRow>                 </TableLayout>             </FrameLayout>              <FrameLayout                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:paddingLeft="7dp"                 android:paddingRight="7dp">                  <TextView                     android:layout_width="fill_parent"                     android:layout_height="wrap_content"                     android:id="@+id/label_beschrijving"                     android:layout_marginBottom="16dp"                     android:textSize="14sp"                     android:text="@string/film_FilmBeschrijving" />             </FrameLayout>              <FrameLayout                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:paddingLeft="7dp"                 android:paddingRight="7dp">                  <TableLayout                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:id="@+id/timetabel"                     android:stretchColumns="*"                     android:shrinkColumns="*"                     android:background="@drawable/tb_body" />             </FrameLayout>         </LinearLayout>     </FrameLayout> getChildAt(1); will return the current page. But, if you then change back to page 2 (from page 3) your list of children will be in this order page 2, page 3, page 1 which means that ViewPager. getChildAt(1); does not return the current page.
You can customize the ViewPager to resize the ViewPager to it's current page size on page swipe.
You can use the below code.
public class WrapContentViewPager extends ViewPager {      private int mCurrentPagePosition = 0;      public WrapContentViewPager(Context context) {         super(context);     }      public WrapContentViewPager(Context context, AttributeSet attrs) {         super(context, attrs);     }      @Override     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {         try {             boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST;             if (wrapHeight) {                 View child = getChildAt(mCurrentPagePosition);                 if (child != null) {                 child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));                 int h = child.getMeasuredHeight();                  heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);                 }             }         } catch (Exception e) {             e.printStackTrace();         }         super.onMeasure(widthMeasureSpec, heightMeasureSpec);     }      public void reMeasureCurrentPage(int position) {         mCurrentPagePosition = position;         requestLayout();     } } Declare it in xml:
    <your.package.name.WrapContentViewPager             android:id="@+id/view_pager"             android:layout_width="match_parent"             android:layout_height="wrap_content">     </your.package.name.WrapContentViewPager> After that call reMeasureCurrentpage function on page swipe.
final WrapContentViewPager wrapContentViewPager = (WrapContentViewPager) findViewById(R.id.view_pager);  wrapContentViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {     @Override     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {      }      @Override     public void onPageSelected(int position) {         wrapContentViewPager.reMeasureCurrentPage(wrapContentViewPager.getCurrentItem());     }      @Override     public void onPageScrollStateChanged(int state) {      } }); I really liked @abhishek-v answer, but made some upgrades:
addPageChangeListener(...) called inside our ViewPager (don't need to call reMeasureCurrentPage(...) manually outside on page swipe)mCurrentPagePosition, because we can use getCurrentItem() try/catch blockViewPager now looks like:
public class WrapContentViewPager extends ViewPager {      public WrapContentViewPager(Context context) {         super(context);         initPageChangeListener();     }      public WrapContentViewPager(Context context, AttributeSet attrs) {         super(context, attrs);         initPageChangeListener();     }      private void initPageChangeListener() {         addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {             @Override             public void onPageSelected(int position) {                 requestLayout();             }         });     }      @Override     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {         View child = getChildAt(getCurrentItem());         if (child != null) {             child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));             int h = child.getMeasuredHeight();             heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);         }         super.onMeasure(widthMeasureSpec, heightMeasureSpec);     }  } If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With