本文记录一个关于ViewPager
与CoordinatorLayout
一起使用的Bug,目前虽然有解决问题的方法,但是引起这个bug的原因依然没有找到。
最初的布局是正常的
项目最初的布局树是这样的:
CoordinatorLayout
--RelativeLayout(height:match_parent)
----各种View
----FrameLayout(height:wrap_content)
------layout
------WrapHeightViewPager
----ImageView
这里的布局要求是这样的:
layout
与WrapHeightViewPager
同一时间最多只有其中一个会显示,也可能两个都不显示。当它们之间有任何一个显示的时候,ImageView
要在它们上面,当它们两个都不显示的时候,ImageView
要在底部。
所以我把这两个View放在了一个FrameLayout
中,并且让ImageView
在其之上来实现这个需求。
WrapHeightViewPager
继承自ViewPager
,以实现按内容自适应高度。它重写了以下方法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
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) height