ViewPagerシリーズ:ViewPagerアダプティブコンテンツの高さ

  • 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()関数の説明は後で追加されます。

おすすめ

転載: blog.csdn.net/zhangjin1120/article/details/114869542