Android中RecyclerView的item寬高問題詳解
前言
本文主要給大家介紹了關(guān)于Android中RecyclerView的item寬高問題的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。
在創(chuàng)建viewholder傳入的View時,如果不指定其viewgroup,就會出現(xiàn)寬高只包裹顯示內(nèi)容的問題。
View view = LayoutInflater.from(context).inflate(R.layout.test_test,null);
上面的做法就會出問題
改成這樣就可以正常顯示設(shè)置的寬高
View view = LayoutInflater.from(context).inflate(R.layout.test_test,parent,false);
那么還是有一個問題。
假如我的view是在adapter創(chuàng)建之前創(chuàng)建的,也就是說我的view是從外邊傳進來的,不是在onCreateViewHolder方法中創(chuàng)建。這樣就無法設(shè)置parent。遇到這種情況又要怎么處理呢?
我也只找了很多方法,比如在onCreateViewHolder方法中parent.addView()
也沒用。
在網(wǎng)上查了很多帖子都是一些扯淡的話,無奈之下我只好查看源碼,沒想到正好發(fā)現(xiàn)解決辦法的關(guān)鍵。
看過源碼就知道原來我們要傳的parent這個參數(shù)就是這個recyclerview。
從這里發(fā)現(xiàn)原來我們用到的parent就是RecyclerView.this。
這就說明只要在創(chuàng)建view之前有recyclerview,那么即便是在adapter之前創(chuàng)建view也能讓這個view在recyclerview中正常顯示
附加內(nèi)容:另類解決item的寬高問題
上面的內(nèi)容是我挺早前寫的,現(xiàn)在遇到新的情況所以補充一下。上面我們說了,如果在創(chuàng)建item時不指定parent,最后展示的效果是會包裹內(nèi)容。
比如:
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"> <TextView android:id="@+id/tv_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/text_size_15" android:layout_centerInParent="true" /> </RelativeLayout>
這樣的item布局,就算我設(shè)置TextView顯示在中間,實際運行的時候會展示在左邊,這個情況有點像RelativeLayout的viewgroup把里面的空氣抽出來一樣。
上面的解決方法是沒問題的,創(chuàng)建時為這個布局設(shè)置parent。但是,有的時候你解耦把RecyclerView和item的耦合度降得很低,這是創(chuàng)建item布局要拿到RecyclerView這個parent很麻煩,這時怎么辦?
其實你會發(fā)現(xiàn),有時候不設(shè)置parent,Item的寬度也能填充整個父布局,為什么,因為這種情況下item的寬度本來就已經(jīng)填充布局了,也就是說在寬度上已經(jīng)沒有“空氣”了,所以再寬上不會被壓縮。
按照這個原理,我們可以來個騷操作解決這個問題,那就是想辦法讓布局寬度填充,對RelativeLayout來說是件容易的事。
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"> <TextView android:id="@+id/tv_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/text_size_15" android:layout_centerInParent="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" /> </RelativeLayout>
這樣寫,展示的時候,第一個TextView的內(nèi)容就能正常的展示到中間。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Android RecyclerView滑動刪除和拖動排序
- Android RecyclerView item選中放大被遮擋問題詳解
- Android RecyclerView實現(xiàn)多種item布局的方法
- Android使用CardView作為RecyclerView的Item并實現(xiàn)拖拽和左滑刪除
- Android中RecyclerView實現(xiàn)Item添加和刪除的代碼示例
- Android RecyclerView顯示Item布局不一致解決辦法
- Android RecyclerView的Item點擊事件實現(xiàn)整理
- Android 中RecyclerView多種item布局的寫法(頭布局+腳布局)
- Android RecyclerView自由拖動item的實現(xiàn)代碼
相關(guān)文章
詳解Android端與JavaWeb傳輸加密(DES+RSA)
這篇文章主要介紹了詳解Android端與JavaWeb傳輸加密(DES+RSA),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11Android獲取assets文件夾中的數(shù)據(jù)并寫入SD卡示例
這篇文章主要介紹了Android獲取assets文件夾中的數(shù)據(jù)并寫入SD卡示例,對初學(xué)Android開發(fā)的朋友來說是一個很實用的功能,需要的朋友可以參考下2014-07-07android開發(fā)教程之handle實現(xiàn)多線程和異步處理
這篇文章主要介紹了android的handle實現(xiàn)多線程和異步處理的示例,大家參考使用吧2014-01-01Android?startActivityForResult的調(diào)用與封裝詳解
startActivityForResult?可以說是我們常用的一種操作了,目前有哪些方式實現(xiàn)?startActivityForResult?的功能呢?本文就來和大家詳細聊聊2023-03-03Android編程中TextView字體屬性設(shè)置方法(大小、字體、下劃線、背景色)
這篇文章主要介紹了Android編程中TextView字體屬性設(shè)置方法,包括大小、字體、下劃線、背景色等設(shè)置技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Ubuntu中為Android實現(xiàn)Application Frameworks層增加硬件訪問服務(wù)
本文主要介紹Android實現(xiàn) Application Frameworks層增加硬件訪問服務(wù),這里對實現(xiàn)增加硬件訪問服務(wù)的功能做出了詳細的工作流程,并提供示例代碼,有需要的小伙伴參考下2016-08-08Android?自定義?Dialog?實現(xiàn)列表?單選、多選、搜索功能
Android開發(fā)經(jīng)常需要用到對話框來進行信息的篩選和搜索,本文詳細介紹了如何使用自定義Dialog結(jié)合RecyclerView和搜索框?qū)崿F(xiàn)這一功能,通過Builder模式構(gòu)建復(fù)雜的Dialog對象,使得代碼更加靈活和易于維護,文中提供了詳細的步驟和代碼注釋2024-10-10