ScrollView中嵌套ViewPager,导致ViewPager不显示了
两种解决方式
一、
固定ViewPager的高度
例如:
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_margin="@dimen/_10" />
但是这种方式明显我不喜欢,所以我选择第二种
二、
自定义 ViewPager
代码段:
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int 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);
}
}
然后改掉将xml修改为
<com.test.widget.MyViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/_10" />
这样显示就完整了
但是又遇到了新的问题,我的ViewPager里面放的是fragment,fragment里面是GridView,由于GridView和ScrollView的滑动冲突,会导致GridView显示不全,要滑动才能解决,开始我设置GridView的宽度为match_parent,但是实际并不能解决,于是,也只能通过自定义GridView来搞定了
解决方案:
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
最后将xml修改为
<com.test.widget.MyGridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/_10"
android:layout_marginBottom="@dimen/_10"
android:horizontalSpacing="@dimen/_10"
android:numColumns="2"
android:verticalSpacing="@dimen/_10" />
完美解决,下课!