2018年3月26日 星期一

[Android] ScrollView包SwipeRefreshLayout包RecyclerView完全沒有畫面(RecyclerView does not show in SwipeRefreshLayout)

問題:
因為RecyclerView做的List上面還要放一些固定的東西,但為了小螢幕手機只好用ScrollView包起來,但為了下拉刷新只好加上SwipeRefreshLayout;
就是ScrollView包SwipeRefreshLayout包RecyclerView,然後...RecyclerView就不秀了,怎麼辦呀?

參考:StackOverflowCSDNivankocijan.xyzCSDN珞璃之神

說明:
根據StackOverflow可知,SwipeRefreshLayout外面不能有ScrollView,那就反過來包;SwipeRefreshLayout包ScrollView,這樣就會秀囉。

只是這樣有幾個問題:

  1. 轉圈(progress view)不在List上方,而是在ScrollView上方。
    =>在意的話,只能改成最外面不是SwipeRefreshLayout,而是CoordinatorLayout,參考CSDN珞璃之神
  2. SwipeRefreshLayout會吃ScrollView手勢。
    =>可以判斷List到頭才啟用SwipeRefreshLayout,可參考CSDN

好啦,如果2這做法SwipeRefreshLayout包ScrollView包RecyclerView大致沒問題,只是如果把ScrollView改為NestedScrollView,下面的RecyclerView做的List會全展開,如果想限制項目數,只能自己在程式裡設定高度了。


手機螢幕高度不夠用問題真的很難解,所以Material Design才會用CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout等元件,讓畫面上方有些東西可以在捲動時縮起來,設計畫面時可參考看看囉。


另外,在查資料時發現NestedScrollView在舊版v4包有很多問題,這篇在用v4:27.1.0時已經沒那些問題了。

沒有留言:

張貼留言