Android - 在运行时更改ViewPager的高度

3

我想改变ViewPager的高度,因为它包含了一些高度不同的子项。我已经了解到wrap_content对于ViewPager是不可行的,因此我想在运行时更改其高度。 我尝试过以下代码,但没有效果:

pager.getLayoutParams().height=1000;

请问有人可以提供帮助吗?

CustomViewPager.class

(自定义ViewPager类)
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>

主类:

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

}

发布整个类 - Rod_Algonquin
2个回答

3

我之前见过这个问题。 也许你可以像这样使用函数:

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

我无法解决那个问题,所以我使用了一个带有滚动视图的全屏ViewPager。 - ninjaxelite

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接