android 开发计算ViewPager高度的问题

文章标签: android,android-viewpager
2014-11-19 11:21:54     人阅读    

     自定义了一个包含 Viewpager的 viewGroup ,viewpager 中使用了PagerAdapter,并且使用 LinearLayOut进行布局页面,对每个组件都设置了 LayoutParams  = WRAP_CONTENT 。

     视图页面展示的很正常,但是 ViewPager  中child.measure() 在调用后不能正确的返回LinearLayout 实际的高度

处理方法

第一个viewpager页面的高度一般是准确的,可以通过获得第一个页面的高度,相当于从第一个页面偷高度..

 

public class HeightWrappingViewPager extends ViewPager {

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

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

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

        boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec)
                == MeasureSpec.AT_MOST;

        if(wrapHeight) {
            /**
 

            第一个   super.onMeasure 被调用会让pager 计算并返回所有可用的高度,
             */

            int width = getMeasuredWidth(), height = getMeasuredHeight();

            widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);

            /*如果当前页面有字内容,获得第一个子的高度 */ 
            if(getChildCount() > 0) {
                View firstChild = getChildAt(0);

                /* 子精确的计算了高度
                 . */
                firstChild.measure(widthMeasureSpec,
                        MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));

                height = firstChild.getMeasuredHeight();
            }

            heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}

其他更好的方法:通过实现 最新的android.support.v4.view 创建视图,他的 onMeasure 被重写过,能够正确的返回


原文地址:http://www.itmmd.com/201411/192.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android ImageView 中通过 URL加载图片报错 Android SkImageDecoder::Factory returned null Error   上一篇
下一篇  android Viewpager 不能动态的设置高度,一直使用第一个fragment页面的高度
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!