<LinearLayout android:id="@+id/container" android:descendantFocusability="blocksDescendants" android:layout_width="match_parent" android:layout_height="match_parent">--- Reference: * [NestedScrollView、RecycleView、ViewPager 等布局方面的常见问题汇总,及解决](https://www.jianshu.com/p/8dd1e902b7cd) * [NestedScrollview won't start from top](https://stackoverflow.com/questions/33584187/nestedscrollview-wont-start-from-top) * [Recycler view inside NestedScrollView causes scroll to start in the middle](https://stackoverflow.com/questions/36314836/recycler-view-inside-nestedscrollview-causes-scroll-to-start-in-the-middle) * [ScrollView(RecyclerView等)为什么会自动滚动原理分析,还有阻止自动滑动的解决方案](https://juejin.im/post/5a2a04726fb9a045055e0993)
2019年11月24日 星期日
[Android] NestedScrollView 嵌套 RecyclerView 時 Scoll 位置停在 RecyclerView
markdown
最近遇到的問題是,Fragment 中為一個 NextedScrollView ,裡面從上至下有 Button 等不同的 View,最下方是 RecyclerView,但是在 Fragment 顯示時,NextedScrollView 會自動滑動到 RecyclerView 的位置。
會這樣的原因是因為,NextedScrollView 在繪製時,會去找尋 child view 中有沒有 has focus 的 child view,如果有,則滾動到它的位置。而 RecyclerView 是它找到的 has focus 的 child view,因此位置就移動到 RecyclerView 了。
這也是為什麼有人呼叫 RecyclerView.setFoucsable(false) 後,就不會發生自動滾動了,因為沒有找到 has focus 的 child view。不過最好的解法,應該是在 NextedScrollView 的直接子 view 中增加 [descendantFocusability](https://developer.android.com/reference/android/view/ViewGroup#attr_android:descendantFocusability) 屬性並將之設為 blocksDescendants,
因為 NextedScrollView 繪製過程中看到了 child view 有這個屬性,就不會再做自動滾動的動作了。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言