2014-08-29 5 views
2

ViewPager의 높이를 변경하려면 높이가 다른 일부 차일드가 포함되어 있습니다. ViewPager에서는 wrap_content가 불가능하므로 런타임시 높이를 변경하고 싶습니다. 나는 이것을 시도했지만 그것은 작동하지 않습니다 :Android - 런타임에 ViewPager의 높이를 변경하십시오.

pager.getLayoutParams().height=1000; 

수있는 사람 모집 도움이 될까요?

CustomViewPager.class

public class CustomViewPager extends ViewPager { 

/** 
* Constructor 
* 
* @param context 
*   the context 
*/ 
public CustomViewPager(Context context) { 
    super(context); 
} 

/** 
* Constructor 
* 
* @param context 
*   the context 
* @param attrs 
*   the attribute set 
*/ 
public CustomViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int height = 0; 
    for (int i = 0; i < getChildCount(); i++) { 

     View child = getChildAt(i); 

     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); 
} 

} 

XML 파일 :

<com.arsoft.ex.viewpager.CustomViewPager 
       android:id="@+id/viewPager" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 
      </com.arsoft.ex.viewpager.CustomViewPager> 

MainClass :

tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
    pager = (CustomViewPager) findViewById(R.id.viewPager); 
    adapter = new MyPagerAdapter(getSupportFragmentManager()); 

    pager.setAdapter(adapter); 

    final int pageMargin = (int) TypedValue.applyDimension(
      TypedValue.COMPLEX_UNIT_DIP, 4, getResources() 
        .getDisplayMetrics()); 
    pager.setPageMargin(pageMargin); 

    tabs.setViewPager(pager); 

FragmentPagerAdapter :

public class MyPagerAdapter extends FragmentPagerAdapter { 

    private final String[] TITLES = { "Cook", "Recipe", "Comments" }; 

    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: **pager.getLayoutParams().height=100;** 
      return CookCardFragment.newInstance(position, pager); 

     case 1: **pager.getLayoutParams().height=400;** 
      return RecipeCardFragment.newInstance(position, pager); 

     case 2: **pager.getLayoutParams().height=1000;** 
      return CookCardFragment.newInstance(position, pager); 
     } 
     return null; 
    } 

} 
+0

당신이 페이지를 변경할 때 ViewPager의 높이를 변경하거나 높이를 변경 할 수 있었다 전체 클래스 게시 –

답변

3

전에이 문제를 보았습니다. 어쩌면이 같은 fumction을 사용할 수

ViewPager vp = (CustomViewPager) findViewById(R.id.viewPager); 
... 
ViewGroup.LayoutParams params = vp.getLayoutParams(); 
params.height = 1000; 
vp.setLayoutParams(params); 
+0

나는 scrollview와 함께 전체 화면의 뷰 페이지를 사용하므로이 문제를 해결할 수 없습니다. – ninjaxelite

관련 문제