ScrollView嵌套ViewPager空白,上下或者左右不能滑动问题

在Android项目中,详情页的ScrollView内嵌ViewPager导致无法正常滑动切换Fragment。问题在于ScrollView无法获取到ViewPager的高度。尝试过设置ScrollView的fillViewport为true和固定ViewPager的高度,但分别出现了显示不全和不能滑动的问题。最终解决方案是重写ViewPager,动态设置其高度,成功解决了滑动和显示问题。只需将布局中的ViewPager替换为自定义的MyViewPager。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做项目,一个详情页涉及到ScrollView中带viewPager,滑动并且切换fragment.做好界面之后发现,


没有我写好的fragment的布局,开始就找fragment的问题,关于设置adapter的时候,fragment中用


getChildFragmentManager,activity中用getSupportFragmentManager这个问题就不细说了,自己这块没毛病,方向有误,


就回去看布局,发现viewpager在布局中其实是没有显示的,应该是因为ScrollView得不到viewpager的高度,所以就显示


不出来了,就开始往这方面解决,查资料说,重写ScrollView的,试了,没用,然后看到说


1、设置ScrollView的fillViewPort为true


2、设置ViewPager的layout_height为一个固定高度


第一种呢,你设置后发现,viewpager是显示了,但是不能上下滑动了,这个fillViewPort的属性,就是充满这个布局,设置了,你


就发现ScrollView成死的了.


第二种我没试,因为fragment里面是有listview的,不可能设死,所以弃用.


最后的解决方案就是还是用ScrollView不重写它,去重写viewpager,设置它的高度.逻辑很简单,顺利解决!


布局中的viewpager,直接用MyViewPager就OK了!

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);
    }



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值