我有一个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);
}
}
谢谢!