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