我ViewPagers
在一个上使用 3 LinearLayout
。我想动态设置ViewPager
高度wrap_content
。我的片段也是ViewPager
动态加载的。因此,如果片段的高度大于 viewpager 的高度,则在页面更改时,应该自动增加 viewpager 的高度。
布局就像
请建议怎么做?
我ViewPagers
在一个上使用 3 LinearLayout
。我想动态设置ViewPager
高度wrap_content
。我的片段也是ViewPager
动态加载的。因此,如果片段的高度大于 viewpager 的高度,则在页面更改时,应该自动增加 viewpager 的高度。
布局就像
请建议怎么做?
问题是“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);
}
}
假设实现如下所示,
<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,则需要更改宽度。