天天看點

Base封裝(二)-- 封裝屬于自己的Library(UI篇)

版權聲明:本文為部落客原創文章,轉載請标明出處。 https://blog.csdn.net/lyhhj/article/details/73554768

緒論

之前分享了一篇

Base封裝(一)–我的最簡MVP架構

簡單的封裝了自己的MVP架構,至于BaseActivity和BaseFragment之前的文章都已經分享過了,隻不過做了一些優化。接下來繼續分享我的封裝之路,今天要分享的是常用的UI,同樣大家看到不合适的地方多多指正啊..

常用元件

在寫一個APP的時候我們通常都會用到一些常用的元件,慢慢的積累下來了就存到自己的庫裡面,以後寫項目的時候就不用再去到處找了,下面看看我收藏了哪些常用的元件吧

1.NoScrollListView、NoScrollGridView、NoScrollViewPager控制不可滑動的元件

我們在某種嵌套下我們可能需要去處理滑動沖突,這三個是我經常會用到的,當然已經改用RecycleView很久了,是以前兩個不會再用了,至于NoScrollViewPager我經常會用到的場景就是在ViewPager裡嵌套ViewPager可能會用到,代碼我就不貼了,在項目裡面都會有的。實作思路也很簡單:

NoScrollListView和NoScrollGridView的實作思路就是繼承ListView和GridView重寫OnMeasure()方法,但是估計很多人都說不出來原理吧。

@Override   
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   
        int expandSpec = MeasureSpec.makeMeasureSpec(   
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   
        super.onMeasure(widthMeasureSpec, expandSpec);   
    }             

如上所示,makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST)

這兩個參數分别代表着

size:表示福布局提供給你的大小參考

model:表示測量規則,共有EXACTLY、AT_MOST、UNSPECIFIED三種

  1. EXACTLY

    表示父視圖希望子視圖的大小應該是由specSize的值來決定的,系統預設會按照這個規則來設定子視圖的大小,開發人員當然也可以按照自己的意願設定成任意的大小。

  2. AT_MOST

    表示子視圖最多隻能是specSize中指定的大小,開發人員應該盡可能小得去設定這個視圖,并且保證不會超過specSize。系統預設會按照這個規則來設定子視圖的大小,開發人員當然也可以按照自己的意願設定成任意的大小。

  3. UNSPECIFIED

    表示開發人員可以将視圖按照自己的意願設定成任意的大小,沒有任何限制。這種情況比較少見,不太會用到。

具體解析大家可以看看這篇文章

http://blog.csdn.net/xuefu_78/article/details/51760585

從源碼角度進行分析的

至于NoScrollViewPager就是攔截OnTouch事件就行了。

2. CircleImageView

圓形的頭像ImageView我一直都用的是這個

https://github.com/hdodenhof/CircleImageView

3.ProgressBar

對于loading加載框這個網上已經有很多了,各式各樣的,如果UI需要你定制的話那就自己自定義一個,如果不需要我一直用的都是之前找到的一個感覺挺好的,仿簡書的樣子

4.統一的Dialog

Dialog的樣式也有很多,一般常用的提示類的個人還是喜歡Android原生态的那種MD風格的Dialog,一直以來用的都是

com.github.afollestad.material-dialogs

5.下拉重新整理、上拉加載

說到這個真的是有很多很多了,以前的PullToRefresh到現在的SwipeRefresgLayout,網上的資源很多,看個人喜好,分享一個下拉重新整理集合,需要的拿去吧

衆多優秀的下拉重新整理(除了我寫的之外T_T)

6.Picker元件

7…….

還有一些就不具體介紹了,我會把我的庫上傳到Github

好了下面介紹一下相關資源的東西

資源篇

1.命名規範

對于命名規範這個東西一直來說都是一個頭疼的東西,随着項目的更新疊代,各式各樣的命名都出來了,有時候為了進度,命名就随意來了,寫的時候想着先把功能搞完回來再改,但是當你真的一點一點累加起來之後你才會發現天呐,這該怎麼改,資源在哪裡使用了,即使你的IDE功能再強大,當你去找那些資源檔案的時候也會很頭疼,是以下面介紹一下一直以來我用的命名規範:

Base封裝(二)-- 封裝屬于自己的Library(UI篇)

就是這個原理圖

WHAT(是什麼)

表明資源實際代表什麼,通常是一個标準的android view,資源類型選項有限。

(例如:MainActivity->activity)

WHERE(在何處)

描述它在app的邏輯子產品,如果在多個頁面用到使用all,其他的就用 使用該資源的頁面所處的邏輯子產品

(例如:MainActiviy->main,ArticleDetailFragment->articledetail)

DESCRIPTION(描述)

用來區分一個頁面中多個相同元素

(例如:title)

SIZE(大小)可選

一個精确的大小或尺寸,可用于drawables和dimensions

(例如:24dp,small)

詳情請參考

一種成功的xml資源命名規範

代碼已經上傳到我的Github

https://github.com/Hankkin/HBase