2014-08-28 85 views
1

我有一個ViewPager和它的適配器我有3個孩子(片段)。這3個孩子的內容應該有不同的高度。Android的 - 如何ViewPager與不同高度的多個孩子

我已經嘗試覆蓋ViewPager中的onMeasure Methode像這樣(src:stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content/18167273#18167273)

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    View view = null; 

    for (int i = 0; i < getChildCount(); i++) { 
     // find the first child view 
     view = getChildAt(i); 
     if (view != null) { 
      // measure the first child view with the specified measure spec 
      view.measure(widthMeasureSpec, heightMeasureSpec); 
     } 

     setMeasuredDimension(getMeasuredWidth(), 
     measureHeight(heightMeasureSpec, view)); 
    } 

} 

但這不適用於ViewPager中的所有孩子,它只爲所有孩子設置一個高度。

這是CustomViewPager從ViewPager擴展:

這是viewPager適配器:每次調用新的片段時

public class MyPagerAdapter extends FragmentPagerAdapter { 

    private final String[] TITLES = { "card1", "card2", "Card3" }; 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return TITLES[position]; 
    } 

    @Override 
    public int getCount() { 
     return TITLES.length; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
     case 0: 
      return CookCardFragment.newInstance(position); 

     case 1: 
      return RecipeCardFragment.newInstance(position); 

     case 2: 
      return CookCardFragment.newInstance(position); 
     } 
     return null; 
    } 

} 

回答

0

做一兩件事只是試圖改變viewpager控制的高度在你的FragmentActivity

+0

問題是,viewPager的childs並不總是相同的高度。例如,我有一個評論孩子,viewPager應該根據內容縮放其高度。 – ninjaxelite 2014-08-28 07:41:50

+0

將viewpager高度更改爲android:layout_height =「wrap_content」 – sandy 2014-08-28 09:57:55

+0

wrap_content不適用於viewpager – ninjaxelite 2014-08-28 15:03:02

0
@Override 
    public float getPageWidth(int position) { 
    return 0.98f; //(0-1] this values specifies how much space a page will occupy on screen 
}