- 外面嵌套一层LinearLayout
- 重写ViewPager
- 网上的实现大部分都存在问题,比如
-
public class WrapContentHeightViewPager extends ViewPager { public WrapContentHeightViewPager(Context context) { super(context); } public WrapContentHeightViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @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)); int h = child.getMeasuredHeight(); if (h > height) //采用最大的view的高度。 height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }正确的写法应该是
-
public class WrapContentHeightViewPager extends ViewPager { public WrapContentHeightViewPager(Context context) { super(context); } public WrapContentHeightViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @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)); ViewGroup.LayoutParams params = child.getLayoutParams(); child.measure(widthMeasureSpec,getChildMeasureSpec(heightMeasureSpec,0,params.height)); int h = child.getMeasuredHeight(); if (h > height) //采用最大的view的高度。 height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
解决ViewPager使用wrap_content不能显示问题的方法
最新推荐文章于 2021-08-20 10:32:08 发布
这篇博客探讨了如何正确重写ViewPager以实现内容区域的高度自适应。原有的实现中存在一个问题,即在遍历子视图并测量高度时,未考虑LayoutParams。修正后的代码通过获取并使用LayoutParams来正确测量子视图的高度,从而确保ViewPager能够根据内容自动调整高度。
1801

被折叠的 条评论
为什么被折叠?



