2

ViewPagers在一个上使用 3 LinearLayout。我想动态设置ViewPager高度wrap_content。我的片段也是ViewPager动态加载的。因此,如果片段的高度大于 viewpager 的高度,则在页面更改时,应该自动增加 viewpager 的高度。

布局就像

在此处输入图像描述

请建议怎么做?

4

2 回答 2

5

问题是“wrap_content”似乎不适用于 View 寻呼机。这是解决方案:

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;

public class CustomViewPager extends ViewPager {

public CustomViewPager(Context context) {
    super(context);
}

public CustomViewPager(Context context, AttributeSet attrs){

    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(widthMeasureSpec, 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);
}
}

参考: Android:我无法拥有 ViewPager WRAP_CONTENT

于 2015-06-18T11:39:10.897 回答
0

假设实现如下所示,

<LinearLayout android:orientation="vertical">
    <ViewPager />
    <ViewPager />
    <ViewPager />
</LinearLayout>

然后将 ViewPagers 的高度设置为wrap_content应该具有所需的结果。无需动态执行此操作。否则,如果您真的想要/需要动态执行此操作,只需从代码中将 ViewPager layoutParams 设置为以下内容:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);
viewPager.setLayoutParams(lp);

LayoutParams 构造函数中的参数是(宽度,高度),如果不希望它是 wrap_content,则需要更改宽度。

于 2013-10-23T14:17:53.633 回答