更改视图寻呼机高度以使用片段的内容高度包装内容

时间:2013-10-23 13:39:58

标签: android android-fragments android-viewpager

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

布局就像

enter image description here

请建议做什么?

2 个答案:

答案 0 :(得分:4)

问题是“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: I am unable to have ViewPager WRAP_CONTENT

答案 1 :(得分: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构造函数中的参数是(width,height),如果您不希望它是wrap_content,则需要更改宽度。