5

いくつViewPagerかのフラグメントを表示してそれらの間をスワイプする必要がありますがViewPager、コンテンツに基づいて高さは動的です。各リストが1つのタブに配置され、タブを変更することで高さがViewPager適切に変更される複数のリストがあるとViewPager仮定しonMeasureます。ViewPager測定。

ここにあるMyViewPager

public class MyViewPager extends ViewPager {

    public MyViewPager(Context context) {
        super(context);
    }
    
    public MyViewPager(Context context, 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);
    }
    
}

また、以下のようにフラグメントが表示されるようになったときのonMeasureメソッドをトリガーしようとしましたが、何も変わりません。MyViewPager

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        PostDetailsActivity activity = (PostDetailsActivity) getActivity();
        activity.pagerParent.requestLayout();
        activity.pagerParent.invalidate();
    }
}
4

1 に答える 1

10

ここで良い解決策を見つけましたViewPager を動的に変更する方法を他の誰かが疑問に思っている場合は、高さを動的に変更します。

また、Git を見る時間がない場合は、ここで簡単な回答を見つけることができます。

于 2016-02-07T04:47:27.343 に答える