ViewPager和Fragment

时间:2015-05-28 09:56:19

标签: android android-fragments android-viewpager

我有一个包含3个片段的ViewPager,问题是每个片段都有不同的高度。在ViewPager中,我尝试使用wrap_content作为高度,但它不起作用。

修改

我需要做的是让ViewPager在切换片段时调整大小。

任何想法?

2 个答案:

答案 0 :(得分:1)

您需要在视图寻呼机中设置高度,而不是xml。

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;

public class CustomViewPager extends ViewPager {

    public CustomViewPager(Context context) {
        super(context);
    }

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

使用onMeasure方法可以满足您的需求,Viewpager正在控制其子项的高度+宽度

如果这不起作用,您可以覆盖View Pager的getPageHeight和GetPagewidth方法

  @Override
        public float getPageHeight(int position) {
         //Return different height based on position.
        // Height is returned as a float
             if(position == 1)
              {
                  return (0.35f);
               }
             else{
                  retrun 0.50f;
                  }
        }

答案 1 :(得分:0)

告诉ViewPager wrap_content它的高度将是最大的碎片。然后,如果您有其他片段比最高片段短,它们将在ViewPager内显得更短。 ViewPager一次保存所有三个片段 - 它不会将片段向左和向右移除,因为它们需要准备好移入。

因此ViewPager的高度始终是最高的片段。相反,您可以将所有片段的高度设置为match_parent,将ViewPager设置为其父级的大小(使用match_parent),或尝试使用最大片段的高度将其调整到最大片段的高度wrap_content(虽然我不知道在一起使用wrap_contentmatch_parent时这是如何工作的)