scrollview+tablayout+viewpager+三个fragment+listview滑动冲突、展示不全

情景    在项目中用到scrollview+tablayout+viewpager+三个fragment.+listview布局; 

                  问题:垂直滑动viewpager展示不全,只展示第一个条目,给viewpager设置固定dp才能显示。但遇到

                  过长的条目,比如 超过设置的dp值还是无法展示的 scrollview。

上图:

                                    scrollview+tablayout+viewpager+三个fragment+listview滑动冲突、展示不全_第1张图片

解决思路:

1:尝试给viewpage设置固定高度 dp值。 

 结果:listview过长无法显示。

2:尝试自定义viewpager:动态计算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);
    }
}

结果:listview可以滑动但只有一个条目的高度。

3:由于listview展示问题,于是尝试自动测量listview高度动态计算去解决问题,定义自定义listview:

public class NoScrollListview extends ListView{  
	  
    public NoScrollListview(Context context, AttributeSet attrs) {  
            super(context, attrs);  
    }  
      
    /** 
     * 动态计算高度 
     */  
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {  
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
                            MeasureSpec.AT_MOST);  
            super.onMeasure(widthMeasureSpec, expandSpec);  

    }  

}  

结果:    

        经过自定义viewpager+自定义listview动态绘制布局,最终问题解决



你可能感兴趣的:(移动开发)