ViewPager的高度包裹 , 页卡问题

来源:互联网 发布:ad高亮pcb某一网络 编辑:程序博客网 时间:2024/04/30 15:03

通过百度 , 网上解决ViewPager高度包裹的问题 , 主要重写onMeasure()的方法.因为项目需求 , 不同页卡的高度是不一样的 , 我的解决办法是 , 只计算第一页的高度 , 后面的页卡 , 都按照第一页的高度.

但是 , 同时也出现了问题 , ViewPager的页卡是有缓存的 , 默认是1的邻居单位 , 但是页卡数量多了 , 高度计算就会出问题.

尝试过把高度的int值 , 改成员变量 , 结果还是不行.

我最后的办法是增加ViewPager的缓存数量 , 原来的1 , 改成2 , 一般是够用了 , 不然 , 高度变化太多的ViewPager , 也不科学吧.


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


// 下面遍历所有child的高度
// 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) // 采用最大的view的高度。
// height = h;
// }


height = 0;
int count = getChildCount();
if (count > 0) {
View child = getChildAt(0);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
height = child.getMeasuredHeight();
}


heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}



最后设置一下缓存数量

mPager.setOffscreenPageLimit(3);

0 0
原创粉丝点击