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

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

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

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

上图:

                                    

解决思路:

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动态绘制布局,最终问题解决



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值