轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處,謝謝虫碉!
- GitHub: @Ricco
首先我要感謝這篇文章《解決ScrollView嵌套R(shí)ecyclerView時(shí)item顯示不全的問題》
還要感謝這篇文章《ScrollView嵌套LinearLayout布局不能撐滿全屏的問題》
ps:最近在新項(xiàng)目中遇到了一個(gè)問題贾惦,一個(gè)ScrollView嵌套要嵌套多個(gè)RecyclerView。如效果圖敦捧。當(dāng)我沒開始寫的時(shí)候就考慮到了Item顯示不全和滑動(dòng)事件的問題。所有我開始查資料解決碰镜,雖然很快就解決了兢卵,但是踩了一個(gè)大坑,所有把他分享給其他正在由此問題的程序員們绪颖。
網(wǎng)上很多技術(shù)文章給出的方案是用自定義類FullyLinearLayoutManager解決問題秽荤,這個(gè)方案雖然最后解決了問題,但是滑動(dòng)流暢度被改變了柠横,像得了老年癡呆一樣慢窃款,這是我的App絕對(duì)不能忍受的。
幸運(yùn)的是我又在網(wǎng)上查到了新的解決方案牍氛,也就是我開篇感謝的那篇文章,而且這個(gè)方案也被很多人使用,但是這個(gè)方案被那個(gè)像老年癡呆一樣慢的文章給否決了晨继,原因是沒有完美解決掂林。好玩的是砚嘴,在我的app中,嵌套問題被完美解決梅垄。唉擂。餐屎。
我知道很多人的懶的點(diǎn)擊我推薦的解決方案,使用我就把他拷貝一下玩祟,然后加點(diǎn)東西腹缩,做個(gè)小筆記,記錄一下。
作者給出的方案是
在xml布局文件中將ScrollView替換android.support.v4.widget.NestedScrollView藏鹊,并在java代碼中設(shè)置recyclerView.setNestedScrollingEnabled(false);屬性润讥。
在MD中,RecyclerView代替了ListView伙判,而NestedScrollView代替了ScrollView象对,就這么簡(jiǎn)單。Nested就是嵌套的意思宴抚。
翻譯:NestedScrollView就像ScrollView勒魔,但它支持代理。作為一個(gè)嵌套的滾動(dòng)父和子菇曲,在新版本和舊版本的Android冠绢。默認(rèn)情況下啟用了嵌套滾動(dòng)。
新的問題:RecyclerView設(shè)置空數(shù)據(jù)View時(shí)布局不能撐滿全屏
當(dāng)解決了嵌套問題后常潮,在給RecyclerView設(shè)置數(shù)據(jù)的時(shí)候弟胀,結(jié)果又出現(xiàn)了一個(gè)小問題,當(dāng)RecyclerView設(shè)置的數(shù)據(jù)存在空白的情況時(shí)喊式,需要顯示EmptyView時(shí)孵户,發(fā)現(xiàn)EmptyView不能填充滿RecyclerView,這時(shí)候設(shè)置“fill_parent”或者“match_parent”是不管用的岔留,因?yàn)楫?dāng)NestedScrollView沒有設(shè)置fillVeewport為true時(shí), 里面的元素(比如RecyclerView)會(huì)按照wrap_content來計(jì)算夏哭。(如截圖效果)
這時(shí)候只需要給NestedScrollView設(shè)置 android:fillViewport="true"即可解決問題。(如截圖效果)
實(shí)例代碼
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
android:fillViewport="true"
android:layout_height="match_parent"
android:layout_width="match_parent">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<其他view>
<android.support.v7.widget.RecyclerView
android:layout_height="match_parent"
android:layout_width="match_parent" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
小計(jì)
如果只使用NestedScrollView替換了ScrollView献联,而不在java代碼中設(shè)置recyclerView.setNestedScrollingEnabled(false);屬性竖配。那么你的App滑動(dòng)流暢度就像得了老年癡呆一樣,和自定義FullyLinearLayoutManager解決方案的滑動(dòng)流暢度有的一拼里逆。