国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例

2019-12-12 01:32:02
字體:
供稿:網(wǎng)友

一、開篇

距離上次寫文章已經(jīng)有段時間了,說實話真不知道最近在忙些什么,現(xiàn)在沉下心來把最近項目中遇到的問題記錄下來便于以后遇到中使用吧!

廢話不多說,先看一下效果圖


二、需求解析

1、先說下項目需求,不管是好評還是差評下邊的Tag標(biāo)簽有不同的展示類型,有的字?jǐn)?shù)多的會單獨占一行處理(這邊其實也可以擴(kuò)充,比如說兩三個字的可以一行顯示三個Tag標(biāo)簽),第一眼看到這個需求準(zhǔn)備使用網(wǎng)上的開源庫TagLayout去實現(xiàn),但是嘗試了一下后發(fā)現(xiàn)其實他們實現(xiàn)的效果同項目要的效果還是有蠻大差距的,可以看到效果圖里邊是要求文字是居中對齊的,左右對稱的。

2、想到使用GridView實現(xiàn)這個功能,定義adapter去實現(xiàn)沒問題,問題是什么時候顯示一行什么時候顯示兩行三行并不能確定,畢竟有時候服務(wù)端返回的沒有類型標(biāo)示只有tag_name和tag_id,你要根據(jù)什么設(shè)置類型吶,而且自從recyclerview之后現(xiàn)在要是還用GridView的話豈不是太落伍了。下邊就重點介紹一下使用recyclerview實現(xiàn)如圖效果。

三、功能實現(xiàn)

我們知道recyclerview實現(xiàn)GridView效果只需配置一下參數(shù)就行了

  GridLayoutManager layoutManage = new GridLayoutManager(getContext(), 2);  recycerView.setLayoutManager(layoutManage);

可以看到GridLayoutManager需要傳遞兩個參數(shù),一個是上下文對象,另一個是一行顯示幾列的參數(shù)常量,既然這個常量可以指定那么是不是這個值可以去控制吶,答案當(dāng)然是yes

我們會注意到GridLayoutManager里邊有個setSpanSizeLookup方法,本篇的重點就是這個方法(這個方法具體意義大家可以網(wǎng)上搜索,會有很多相關(guān)介紹,以及通過它實現(xiàn)一些復(fù)雜的布局,再次不做過多討論)

   layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {         @Override         public int getSpanSize(int position) {           return 0;         }       });

其實getSpanSize返回值就是控制每行有幾列的,根據(jù)這個思路我們不妨試試。因為recyclerview填充數(shù)據(jù)是根據(jù)adapter實現(xiàn)的,我們就把給adapter的數(shù)據(jù)源同樣在setSpanSizeLookup這個方法里邊判斷一下不就行了嗎?
根據(jù)這個思路于是有了下面的代碼

    /**     * 如果單個item顯示的字?jǐn)?shù)大于指定某個值就顯示一列 默認(rèn)2列     */     //設(shè)置item數(shù)據(jù)大于多少字只顯示一行 默認(rèn) 超過九個字的程度只顯示一列     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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 淮安市| 曲靖市| 东乡族自治县| 东阿县| 夹江县| 鹿邑县| 义马市| 璧山县| 桂阳县| 仁布县| 昌乐县| 汉沽区| 新乐市| 于都县| 宁波市| 高邮市| 德兴市| 合川市| 炉霍县| 丹江口市| 务川| 池州市| 尼勒克县| 弥渡县| 友谊县| 泰顺县| 新晃| 繁昌县| 江门市| 漾濞| 西和县| 丹阳市| 甘谷县| 泽州县| 西充县| 十堰市| 德钦县| 章丘市| 通道| 阿荣旗| 宁远县|