如何添加动态Viewpager高度

时间:2016-09-27 15:44:02

标签: android android-viewpager android-adapter

我有一个以3 x 3显示项目的Viewpager。此Viewpager是包含其他视图的布局的一部分,因此需要根据页面中的项目数动态设置高度。

基于这个问题,我创建了一个自定义的viewpager来覆盖onMeasure,如下所示:

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        try {
            View child = getChildAt(mCurrentPagePosition);
            if (child != null) {
                child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
                int h = child.getMeasuredHeight() * 3;
                heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        int count = this.getChildCount();
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

这扩展了Viewpager以连续显示三个项目:

Viewpager showing three rows

我正在寻找一种将高度动态设置为

的方法
int h = child.getMeasuredHeight() * 1;

int h = child.getMeasuredHeight() * 3;

根据页面中显示的项目数量,我可以动态缩小高度。任何指针都很受欢迎。

Viewpager showing two rows

Viewpager showing two rows

1 个答案:

答案 0 :(得分:1)

如何使用所需尺寸调用setMeasuredDimension?

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    try {
        View child = getChildAt(mCurrentPagePosition);
        if (child != null) {
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight() * 3;
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    int count = this.getChildCount();
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(widthMeasureSpec, h);
}

这会解决您的问题吗?