Android6.0以上关于RecyclerView显是不全的问题

博客聚焦于Android 6.0以上系统中RecyclerView显示不全的问题,该问题出现在RecyclerView嵌套在ScrollView的布局里。文中给出两种解决方法,一是在RecyclerView外嵌套RelativeLayout并添加特定属性;二是用NestedScrollView替代ScrollView并设置相关代码,作者认为第二种方法更佳。

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

Android6.0以上关于RecyclerView显是不全的问题

需求描述

适配的时候发现Android 6.0以上,RecyclerView显示不全,以下是没有问题的。
这个时候查看布局文件,可以看到RecyclerView是嵌套在ScrollView中的。

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:overScrollMode="never"
            android:paddingLeft="16dp"
            android:paddingRight="16dp" />
    </ScrollView>

解决方法

第一种解决方法

方法

在RecyclerView上在嵌套上一层RelativeLayout,添加属性android:descendantFocusability=”blocksDescendants”(当一个view获取焦点时,viewGroup会覆盖子类控件而直接获取焦点)解决嵌套卡顿的问题。

注意,设立只能使用RelativeLayout,使用FrameLayout、LinearLayout等其他常用的布局控件是不行的。亲测。

代码
 <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:descendantFocusability="blocksDescendants">

            <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:overScrollMode="never"
                android:paddingLeft="16dp"
                android:paddingRight="16dp" />

        </RelativeLayout>
    </ScrollView>

第二种解决方法

方法

使用android.support.v4.widget.NestedScrollView替代ScrollView,并在代码中设置recyclerView.setNestedScrollingEnabled(false)(设置是否允许嵌套滑动)。既可以填ITEM显示不全的坑,又可以填嵌套滑动卡顿的坑。

代码
    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:overScrollMode="never"
            android:paddingLeft="16dp"
            android:paddingRight="16dp" />
    </android.support.v4.widget.NestedScrollView>
recyclerView.setNestedScrollingEnabled(false);

总结

相比较而言,个人觉得第二种解决方法更好,第一种方法布局嵌套,总有一种想让人优化的冲动,所以觉得第二种解决方法更好。

转载于:https://www.cnblogs.com/zhangmiao14/p/9538979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值