項目中遇到頁面整體需要可以垂直方向滑動,頁面內部嵌套一個或者多個recyclerview的情況(不管是橫向還是豎向的列表),豎向的recyclerview不需要滑動,橫向可以滑動。很自然的想到scrollview嵌套recyclerview去實現,但是由于一些細節不了解,會出現recyclerview item顯示不全的情況,甚至是不顯示。
有4種情況:
- 使用Theme.AppCompat.Light.DarkActionBar 主題,scrollview嵌套recyclerview
- 使用Theme.AppCompat.Light.DarkActionBar 主題,nestedscrollview嵌套recyclerview
- 使用Theme.AppCompat.Light.NoActionBar 主題,scrollview嵌套recyclerview
- 使用Theme.AppCompat.Light.NoActionBar 主題,nestedscrollview嵌套recyclerview
第一種情況會顯示不全,解決辦法如下:
scrollview 增加屬性android:fillViewport="true" ,因為滑動控件scrollview和NestedScrollView 的子控件,必須由一個ViewGroup包裹,目前使用LinearLayout,需要在這個ViewGroup增加屬性android:focusable="true"android:focusableInTouchMode="true"。
最后覆寫recyclerview的canScrollVertically 方法返回false。
第二種情況recyclerview顯示正常。
第三種情況會出現頁面打開自動向上滑動一段距離的現象,就算做了第一種情況的處理,recyclerview仍然顯示不全。只好把scrollview替換為nestedscrollview,變成第四種情況去解決。
第四種情況會出現頁面打開自動向上滑動一段距離的現象,解決辦法同第一種情況。