保持ViewPager元素的最大高度相同

时间:2018-10-15 19:29:56

标签: android android-layout android-viewpager resize android-viewgroup

我有一个viewpager(在CardView中),可以在4个不同的项目之间滑动。这些页面的布局相对相同,并且高度接近(相同宽度),但是在某些情况下,一个孩子的额外一行文本会在滑动Viewpager时使Cardview的大小明显变大或变小。

我有一段代码正在使用,根据我的理解,这很有意义,它可以查看viewpager的子级并测量其高度,从而节省了最大的代码。然后返回最大高度并将其设置为viewpager。在我的用法中,第1,2,3页可以按预期工作(不同的文本内容量,但可以正确显示所有相同的高度),但是第4页恢复为较小的尺寸,并为子测量步骤返回不同的测量值。知道为什么吗?

public class WrapContentViewPager extends ViewPager {
public WrapContentViewPager(Context context) {
    super(context);
}

public WrapContentViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int 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;
    }

    if (height != 0) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
    }

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

谢谢!

0 个答案:

没有答案