解決ScrollView嵌套RecyclerView出現item顯示不全的問題


 

問題:ScrollView嵌套RecyclerView時,RecyclerView的item顯示不全

出現問題不要慌,耐心解決才是王道,哈哈。首先說下出現這個問題的情景吧,首先聲明這個問題在23版本以上出現的,23版本是android 6.0版本,是的當我們targetSdkVersion=23的時候(也就是我們兼容到23版本)是沒有問題的,一但兼容到23版本以上就會出現這個問題,這個坑也是第一次踩到,發表個博客警戒下自己,同時也希望可以幫助你順利的填上這個坑。

首先這個問題的解決方案有3種(有效的,無效的咱們略過)

第一種:既然這個問題是23版本以上的問題(不包括23版本),那么我們就只兼容到23版本就OK嘍,就是修改app的build.gradle的targetSdkVersion = 23 和 compileSdkVersion = 23,這個問題就可以順利解決,但是現在市場上7.0可以說已經普遍了,8.0手機也已經出了,只兼容到6.0版本顯然不是我們想要的結果,那么接下來還有2種解決方案,搬個板凳坐下來認真聽下面兩種吧。

第二種:在你的RecyclerView上再嵌套一層RelativeLayout然后添加屬性 android:descendantFocusability="blocksDescendants",既然提到了這個屬性就說下它的意思吧,知道的同學再復習一遍唄,鞏固鞏固更牢靠。

首先該屬性android:descendantFocusability的含義是:當一個view獲取焦點時,定義ViewGroup和其子控件兩者之間的關系。

它一共有3個屬性值,它們分別是:

beforeDescendants:viewGroup會優先子類控件而獲取焦點

afterDescendants:viewGroup只有當子類控件不需要獲取焦點的時候才去獲取焦點

blocksDescendants:viewGroup會覆蓋子類控件而直接獲取焦點

想必了解了這個屬性之后,你就會恍然大悟啦。

  1.  
    <RelativeLayout
  2.  
    android:layout_width= "match_parent"
  3.  
    android:layout_height= "wrap_content"
  4.  
    android:descendantFocusability= "blocksDescendants">
  5.  
    <android.support.v7.widget.RecyclerView
  6.  
    android:id= "@+id/rv_me_window"
  7.  
    android:layout_width= "match_parent"
  8.  
    android:layout_height= "match_parent"
  9.  
    android:paddingLeft= "16dp"
  10.  
    android:paddingRight= "16dp"
  11.  
    android:overScrollMode= "never"/>
  12.  
    </RelativeLayout>

第三種:當然這種方式是今天偶然在網上看到的,聽說既可以填item顯示不全的坑,又可以填嵌套滑動卡頓的坑。是不是很期待?哈哈,終極解決方案總是要在最后閃亮登場滴,不過這種方式本人沒有測試過,不知道具體的可靠性,同學們需要自行測試,本人用的是第二種方案。

方案是這樣的:首先在xml布局中將你的ScrollView替換成android.support.v4.widget.NestedScrollView,並在java代碼中設置recyclerView.setNestedScrollingEnabled(false);

這樣就可以完美解決啦。NestedScrollView這個東西是5.0的新控件,如果不了解的同學可以自行百度,網上對它的解釋有很多,也有很多例子,當時我用它的時候,好像是跟做toolbar聯動的時候用過,不過已經記得不太深刻了,好久沒有使用這個了,印象當中使用這個好像還需要手動依賴compile 'com.android.support:design:25.0.1'這個庫。

最后送上NestedScrollView的相關文章:

①http://blog.csdn.net/mchenys/article/details/51541306     

②https://segmentfault.com/a/1190000002873657

好了,不多說了,寫這篇文章主要有兩點,一是用於警告自己防止再次入坑,二是希望本篇文章可以幫到你,讓你盡快脫坑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM