ViewPager设置wrap_content无效
2016-05-06 15:09
309 查看
问题描述
最近开发中ViewPager设置高度为wrap_content,然后在ItemView中固定高度,发现ViewPager并不能自适应调整高度,总是会占满可以用的布局,效果和match_parent一样
问题分析
于是看了一下ViewPager的源码,尺寸问题一般是在onMeasure时确定的,定位到ViewPager的onMeasure中查看:
从注释可以看到,viewPager把自己默认的size都是0,然后优先用父布局传过来的宽高,其效果就是宽高没有指定的话就相当于match_parent,完全不考虑子view的属性,因为子view可以被动态的添加或删除,宽高可能是不确定的。
问题总结
从问题分析可以知道,要限制ViewPager的高度,不能靠ViewPager自身的wrap_content实现,可以写死固定高度,可以通过外部加一个布局来限制高度,当然,如果非要使用wrap_content来限制高度的话,可以重写onMeasure方法:
最近开发中ViewPager设置高度为wrap_content,然后在ItemView中固定高度,发现ViewPager并不能自适应调整高度,总是会占满可以用的布局,效果和match_parent一样
问题分析
于是看了一下ViewPager的源码,尺寸问题一般是在onMeasure时确定的,定位到ViewPager的onMeasure中查看:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // For simple implementation, our internal size is always 0. // We depend on the container to specify the layout size of // our view. We can't really know what it is since we will be // adding and removing different arbitrary views and do not // want the layout to change as this happens. setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec)); final int measuredWidth = getMeasuredWidth(); final int maxGutterSize = measuredWidth / 10; mGutterSize = Math.min(maxGutterSize, mDefaultGutterSize); ... }
从注释可以看到,viewPager把自己默认的size都是0,然后优先用父布局传过来的宽高,其效果就是宽高没有指定的话就相当于match_parent,完全不考虑子view的属性,因为子view可以被动态的添加或删除,宽高可能是不确定的。
问题总结
从问题分析可以知道,要限制ViewPager的高度,不能靠ViewPager自身的wrap_content实现,可以写死固定高度,可以通过外部加一个布局来限制高度,当然,如果非要使用wrap_content来限制高度的话,可以重写onMeasure方法:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; //下面遍历所有child的高度 for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)) 9507 ; int h = child.getMeasuredHeight(); if (h > height) //采用最大的view的高度。 height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
相关文章推荐
- Android TTS (二)
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- C#之冒泡排序(委托)
- CentOS yum 源的配置与使用
- 关于 使用百度地图SDK 打包签名后出现的 app-key错误的解决
- 总结几个不错的编程观点和习惯
- spring ApplicationContext
- 【框架-MFC】截取整个屏幕,伪造桌面
- shell脚本报错问题: -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory
- java集合------TreeMap
- Java对象序列化
- Linux上安装多版本Python,easy_install和pip
- 制作根文件树出现的问题
- YY项目之Parcelable传递复杂的对象
- 树的最大独立集
- linux学习之信号
- Linux rpm 命令参数使用详解[介绍和应用]
- 黑白图像—————— 八连块
- java集合------HashTable
- 接入支付宝出现交易订单处理失败,请稍后再试(ALI64)的错误【转】