-
ViewPagerにはフラグメントがあり、ViewPagerのlayout_heightはwrap_contentに設定されています。フラグメント内に3つのモジュールが垂直に配置されている場合、モジュールの1つを非表示にする必要があります。コードを非表示にすると、フラグメントの高さの値が小さくなり、下部に空白が表示されます。
-
つまり、wrap_contentはViewPagerの高さに設定されていますが、適応可能な高さはなく、onMeasure()を書き直す必要があります。BBが少なく、コードがオンになっています。
public class CannotScrollViewPager extends ViewPager {
public CannotScrollViewPager(@NonNull Context context) {
this(context, null);
}
public CannotScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@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 = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
-
この原理は詳細には研究されておらず、MeasureSpec.makeMeasureSpec()関数の説明は後で追加されます。