Android NestedScrollView嵌套ViewPager以及ViewPager内嵌套recyclerView的问题

NestedScrollView嵌套viewpager会出现两个问题

1.viewpager无法显示,高度为0

2.嵌套后NestedScrollView无法滑动

先说第一个问题:
viewpager无法正常显示,只需要在NestedScrollView内加入
android:fillViewport="true"就可以了

  <android.support.v4.widget.NestedScrollView
            android:id="@+id/novice_live_scroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:overScrollMode="never"
            android:fillViewport="true"
            >

第二个问题,嵌套后NestedScrollView无法滑动,这个问题只要我们重写一个viewpager,然后在xml里用我们的viewpager就可以了

public class WrapContentHeightViewPager extends ViewPager {
    public WrapContentHeightViewPager(Context context) {
        super(context);  
    }  
  
    public WrapContentHeightViewPager(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);  
    }  
}  

如果viewpager内还嵌套了recycleview,只想让nestedScrollView滑动,recyclerView只用来展示,那么还需要对recyclerview进行处理,如下:

   LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), 		   LinearLayoutManager.VERTICAL, false) {
            @Override
            public boolean canScrollVertically() {
                return false;
            }
        };
    recycler.setLayoutManager(linearLayoutManager);

记录一个发现的小坑,有遇到这些问题的朋友,希望这个帖子可以帮到大家。

猜你喜欢

转载自blog.csdn.net/weixin_36357363/article/details/111562371