RecyclerView通過GridLayoutManager實(shí)現(xiàn)多樣式布局的示例
一、開篇
距離上次寫文章已經(jīng)有段時(shí)間了,說實(shí)話真不知道最近在忙些什么,現(xiàn)在沉下心來把最近項(xiàng)目中遇到的問題記錄下來便于以后遇到中使用吧!
廢話不多說,先看一下效果圖
二、需求解析
1、先說下項(xiàng)目需求,不管是好評(píng)還是差評(píng)下邊的Tag標(biāo)簽有不同的展示類型,有的字?jǐn)?shù)多的會(huì)單獨(dú)占一行處理(這邊其實(shí)也可以擴(kuò)充,比如說兩三個(gè)字的可以一行顯示三個(gè)Tag標(biāo)簽),第一眼看到這個(gè)需求準(zhǔn)備使用網(wǎng)上的開源庫TagLayout去實(shí)現(xiàn),但是嘗試了一下后發(fā)現(xiàn)其實(shí)他們實(shí)現(xiàn)的效果同項(xiàng)目要的效果還是有蠻大差距的,可以看到效果圖里邊是要求文字是居中對(duì)齊的,左右對(duì)稱的。
2、想到使用GridView實(shí)現(xiàn)這個(gè)功能,定義adapter去實(shí)現(xiàn)沒問題,問題是什么時(shí)候顯示一行什么時(shí)候顯示兩行三行并不能確定,畢竟有時(shí)候服務(wù)端返回的沒有類型標(biāo)示只有tag_name和tag_id,你要根據(jù)什么設(shè)置類型吶,而且自從recyclerview之后現(xiàn)在要是還用GridView的話豈不是太落伍了。下邊就重點(diǎn)介紹一下使用recyclerview實(shí)現(xiàn)如圖效果。
三、功能實(shí)現(xiàn)
我們知道recyclerview實(shí)現(xiàn)GridView效果只需配置一下參數(shù)就行了
GridLayoutManager layoutManage = new GridLayoutManager(getContext(), 2); recycerView.setLayoutManager(layoutManage);
可以看到GridLayoutManager需要傳遞兩個(gè)參數(shù),一個(gè)是上下文對(duì)象,另一個(gè)是一行顯示幾列的參數(shù)常量,既然這個(gè)常量可以指定那么是不是這個(gè)值可以去控制吶,答案當(dāng)然是yes
我們會(huì)注意到GridLayoutManager里邊有個(gè)setSpanSizeLookup方法,本篇的重點(diǎn)就是這個(gè)方法(這個(gè)方法具體意義大家可以網(wǎng)上搜索,會(huì)有很多相關(guān)介紹,以及通過它實(shí)現(xiàn)一些復(fù)雜的布局,再次不做過多討論)
layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return 0; } });
其實(shí)getSpanSize返回值就是控制每行有幾列的,根據(jù)這個(gè)思路我們不妨試試。因?yàn)閞ecyclerview填充數(shù)據(jù)是根據(jù)adapter實(shí)現(xiàn)的,我們就把給adapter的數(shù)據(jù)源同樣在setSpanSizeLookup這個(gè)方法里邊判斷一下不就行了嗎?
根據(jù)這個(gè)思路于是有了下面的代碼
/** * 如果單個(gè)item顯示的字?jǐn)?shù)大于指定某個(gè)值就顯示一列 默認(rèn)2列 */ //設(shè)置item數(shù)據(jù)大于多少字只顯示一行 默認(rèn) 超過九個(gè)字的程度只顯示一列 private static final int MAX = 9; private int setSpanSize(int position, List<TagBean> listEntities) { int count; if (listEntities.get(position).getTag_name().length() > MAX) { count = 2; } else { count = 1; } return count; } layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return setSpanSize(position,list); } });
核心代碼就這么多,我們可以根據(jù)自己的需求隨意定制樣式
最后奉上源碼地址:https://github.com/lygttpod/AndroidCustomView
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Recyclerview添加頭布局和尾布局、item點(diǎn)擊事件詳解
- Android RecyclerView顯示Item布局不一致解決辦法
- Android RecyclerView網(wǎng)格布局(支持多種分割線)詳解(2)
- Android RecyclerView線性布局詳解(1)
- Android RecyclerView加載兩種布局的方法
- Android開發(fā)中RecyclerView模仿探探左右滑動(dòng)布局功能
- Android 中RecyclerView多種item布局的寫法(頭布局+腳布局)
- Android RecyclerView加載不同布局簡單實(shí)現(xiàn)
- Android中RecyclerView布局代替GridView實(shí)現(xiàn)類似支付寶的界面
- Android RecyclerView布局就這么簡單
- RecyclerView的使用之多種Item加載布局
相關(guān)文章
Android Studio 導(dǎo)入新工程項(xiàng)目圖解
這篇文章主要介紹了Android Studio 導(dǎo)入新工程項(xiàng)目圖解,需要的朋友可以參考下2017-12-12Android AlertDialog自定義樣式實(shí)現(xiàn)代碼
這篇文章主要介紹了Android AlertDialog自定義樣式實(shí)現(xiàn)代碼的相關(guān)資料,這里提供了實(shí)例代碼,一個(gè)簡單示例,需要的朋友可以參考下2016-12-12Android中的Intent Filter匹配規(guī)則簡介
這篇文章主要為大家詳細(xì)介紹了Android中的Intent Filter匹配規(guī)則,感興趣的小伙伴們可以參考一下2016-04-04Android高性能日志寫入方案的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于Android高性能日志寫入方案的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Android自定義view實(shí)現(xiàn)滑動(dòng)解鎖效果
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)滑動(dòng)解鎖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05Android底部導(dǎo)航欄的三種風(fēng)格實(shí)現(xiàn)
這篇文章主要介紹了Android底部導(dǎo)航欄的三種風(fēng)格實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Android實(shí)現(xiàn)帶簽到贏積分功能的日歷
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶簽到贏積分功能的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05