简要
NestedScrollView嵌套Recyclerview,在NestedScrollView 中addView 添加不同的布局样式。当从列表页面启动新的页面Recyclerview列表置顶了。
示例代码
<androidx.core.widget.NestedScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/xxxx_info"
layout="@layout/layout_item2" />
<com.xxxx.widget.ClassLayout
android:id="@+id/layoutBeforeClass"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
解决方式
Recyclerview顶上去,是因为Recyclerview抢占焦点从而出现该问题。对此设置如下属性解决该问题
- 在NestedScrollView xml 布局节点设置 android:focusableInTouchMode="true"
<androidx.core.widget.NestedScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:focusableInTouchMode="true"
android:layout_height="match_parent">
// 省略部分代码 、、、、、
</androidx.core.widget.NestedScrollView>
-
在Recyclerview 直属父节点布局设置如下属性
android:focusable="true"
android:descendantFocusability="blocksDescendants"<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:descendantFocusability="blocksDescendants" android:orientation="vertical"> <com.xxxx.widget.ClassLayout android:id="@+id/layoutBeforeClass" android:layout_width="match_parent" android:layout_height="wrap_content"/> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
问题解决