ViewPager设置wrap_content无效
来源:互联网 发布:末日战歌全套源码 编辑:程序博客网 时间:2024/06/04 23:22
问题描述
最近开发中ViewPager设置高度为wrap_content,然后在ItemView中固定高度,发现ViewPager并不能自适应调整高度,总是会占满可以用的布局,效果和match_parent一样
问题分析
于是看了一下ViewPager的源码,尺寸问题一般是在onMeasure时确定的,定位到ViewPager的onMeasure中查看:
@Overrideprotected 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方法:
@Overrideprotected 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)); int h = child.getMeasuredHeight(); if (h > height) //采用最大的view的高度。 height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
0 0
- ViewPager设置wrap_content无效
- 【android】解决Viewpager设置高度为wrap_content无效的方法
- 解决ViewPager 高度wrap_content无效问题
- 解决ViewPager 高度wrap_content无效问题
- Android 解决ViewPager设置高度为wrap_content无效的方法 MyViewPager
- ViewPager不能高度自适应?height=wrap_content 无效解决办法
- ViewPager不能高度自适应?height=wrap_content 无效解决办法
- ViewPager高度自适应?height=wrap_content 无效、固定高度适配性差
- 解决ViewPager 高度wrap_content无效问题 - 向大拿学习
- ViewPager不能高度自适应?height=wrap_content 无效解决办法
- ViewPager wrap_content
- ViewPager设置setOnPageChangeListener时无效
- 自定义View设置padding和wrap_content无效的解决办法
- 解决ViewPager中RecyclerView的高度设为wrap_content无效的问题
- viewpager wrap_content 不显示
- AppCompat主题下 button 宽高设置wrap_content属性无效的原因
- 使用ViewPager,设置为wrap_content后没有效果,以及多个view高度不同时ViewPager高度自适应
- RecyclerView横向滑动布局宽度wrap_content无效
- FZU 2147(数学,规律)
- 【框架-MFC】截取整个屏幕,伪造桌面
- Android TTS (二)
- Android Dev Intro - An Example about Handler
- 关于 使用百度地图SDK 打包签名后出现的 app-key错误的解决
- ViewPager设置wrap_content无效
- CentOS yum 源的配置与使用
- 总结几个不错的编程观点和习惯
- fetch API 简单解读
- Android 上传文件,图片。以及服务器端接收相关。
- Silverlight利用故事板设计闪烁的动画
- Android网络通信之HttpURLConnection
- 第十周-圆柱类族的设计项目
- [LeetCode28]