我在一个ViewPagers
上使用了3 LinearLayout
。我想动态地将ViewPager
的高度设置为wrap_content
。
我的片段也动态加载到ViewPager
。因此,如果片段的高度大于viewpager的高度,那么在页面更改时,viewpager的高度应该自动增加。
布局就像
请建议做什么?
答案 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);
}
}
答案 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,则需要更改宽度。