ScrollView嵌套RecyclerView显示不全

2021-04-12  本文已影响0人  jiluyixia

ScrollView里面有多个RecyclerView,发现其中一个显示不全,只显示一行,第二行需要拖动才显示出来。
纳闷的半天,发现是加载这个页面的时候,这个RecyclerView刚好在屏幕的最底下。

网上找到一个办法:https://blog.csdn.net/lyh1299259684/article/details/78494655

第二种:在你的RecyclerView上再嵌套一层RelativeLayout然后添加属性 android:descendantFocusability="blocksDescendants",既然提到了这个属性就说下它的意思吧,知道的同学再复习一遍呗,巩固巩固更牢靠。

首先该属性android:descendantFocusability的含义是:当一个view获取焦点时,定义ViewGroup和其子控件两者之间的关系。

它一共有3个属性值,它们分别是:

beforeDescendants:viewGroup会优先子类控件而获取焦点

afterDescendants:viewGroup只有当子类控件不需要获取焦点的时候才去获取焦点

blocksDescendants:viewGroup会覆盖子类控件而直接获取焦点

想必了解了这个属性之后,你就会恍然大悟啦。

<RelativeLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:descendantFocusability="blocksDescendants">
        <android.support.v7.widget.RecyclerView
             android:id="@+id/rv_me_window"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:paddingLeft="16dp"
             android:paddingRight="16dp"
             android:overScrollMode="never"/>
</RelativeLayout>

另外,ScrollView嵌套RecyclerView会影响滑动,需要禁止RecyclerView的滑动事件。

自定义RecyclerView:

/**
 * 取消事件消费
 */
public class NoRecyclerView extends RecyclerView {
    public NoRecyclerView(@NonNull Context context) {
        super(context);
    }

    public NoRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public NoRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        return false;
    }

}
上一篇下一篇

猜你喜欢

热点阅读