久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

UiStatus 一個簡單且強大的 Android Ui 視圖狀態(tài)控制庫

 codingSmart 2021-10-22

code小生,一個專注 Android 領域的技術平臺

公眾號回復 Android 加入我的安卓技術群

作者:雪地里面曬太陽
鏈接:https://www.jianshu.com/p/895c9441c28b
聲明:本文來自
雪地里面曬太陽投稿,轉發(fā)等請聯(lián)系原作者授權

我一直覺得程序員就像詩人一樣,,敲代碼就像寫詩,好的代碼何嘗不是一首優(yōu)美的詩,!

所以我把項目中的視圖控制部分抽取出來,,單獨封裝成了UiStatus這個庫。希望可以幫助大家簡化這部分操作,,也希望對大家有用,。

部分效果演示

優(yōu)點:

1.輕量:簡單且夠用?。?!
2.省內(nèi)存:使用ViewStub,,所有未使用到的狀態(tài)均不會初始化,減少視圖初始化開銷,。
3.解耦,、封裝:降低各種視圖狀態(tài)和業(yè)務層耦合,使用者只需要關心業(yè)務層邏輯而無需知道視圖狀態(tài)管理內(nèi)部邏輯,。
4.自由:不提供任何狀態(tài)視圖,,高度可配置,完全由開發(fā)者自己定義,。
5.強大:可以使用在任何Activity,、Fragment、View當中,。

目前該庫包含的狀態(tài)有9種:
|: 常量名稱 :|: 含義 :|: 使用場景 :|
| LOADING | 加載中| 頁面加載中狀態(tài) |
| NETWORK_ERROR | 網(wǎng)絡錯誤 | 當網(wǎng)絡連接錯誤時展示的界面 |
| LOAD_ERROR | 加載失敗 | 接口請求失敗時展示給用戶的界面 |
| EMPTY | 空布局 | 當獲取的數(shù)據(jù)為空時展示的界面 |
| NOT_FOUND | 未找到內(nèi)容布局 | 有時獲取的內(nèi)容已被服務器刪除,,此時展示給用戶一個404內(nèi)容被刪除的界面 |
| CONTENT|內(nèi)容 | 真正需要展示給用戶的內(nèi)容視圖,也是開發(fā)者在layout里實際布局的視圖 |
| WIDGET_NETWORK_ERROR | 網(wǎng)絡錯誤小部件 | 一個類似于QQ,、微信斷網(wǎng)時頂部顯示的網(wǎng)絡錯誤提示視圖 |
| WIDGET_ELFIN | 小精靈(提示布局) | 一種頂部出現(xiàn)的提示布局,,可以做類似于簡書刷新時提醒推薦內(nèi)容條數(shù)的小部件 |
| WIDGET_FLOAT | 底部Float | 一種底部彈出的浮動布局,可以實現(xiàn)底部彈出小組件的功能 |

在這里我們將前6種狀態(tài)稱之為普通狀態(tài)視圖,,后面3種統(tǒng)稱為Widget小部件,。下文不再贅述!

其中,,普通狀態(tài)視圖不會同時顯示,,Widget小部件狀態(tài)的顯示和前6種狀態(tài)不沖突(可以同時顯示),

視圖層次上Widget在普通狀態(tài)視圖之上,,WIDGET_ELFIN在WIDGET_NETWORK_ERROR之下,。

使用步驟

1.添加依賴

step one:

allprojects {

    repositories {

        maven { url 'https://www.' }

}

}

step two :

dependencies {

        implementation 'com.github.FengChenSunshine:UiStatus:{version}'

}

2.全局配置

UiStatus庫不提供任何狀態(tài)的視圖,完全由開發(fā)者自己自定義提供,。

①.獲取全局視圖控制管理者.

UiStatusManager.getInstance()

②.配置狀態(tài)視圖.

/**

@params uiStatus    視圖狀態(tài).

@params layoutResId 開發(fā)者自定義的該狀態(tài)視圖.

*/


addUiStatusConfig(@UiStatus int uiStatus, @LayoutRes int layoutResId);

/**

@params uiStatus          視圖狀態(tài).

@params layoutResId        開發(fā)者自定義的該狀態(tài)視圖.

@params retryTriggerViewId 該狀態(tài)視圖上點擊事件的觸發(fā)控件id.

@params retryListener      點擊事件觸發(fā)后的回調(diào).

*/


addUiStatusConfig(@UiStatus int uiStatus, @LayoutRes int layoutResId, @IdRes int retryTriggerViewId, OnRetryListener retryListener);

/**

該方法只針對Widget相關狀態(tài)有效.

@params uiStatus      視圖狀態(tài).

@params topMarginPx    widget相對于內(nèi)容視圖的頂部距離,比如可能需要預留出頂部Toolbar高度的距離.

@params bottomMarginPx widget相對于內(nèi)容視圖的底部距離,比如可能需要預留出底部導航欄高度的距離.

*/


setWidgetMargin(@UiStatus @IntRange(from = 7L,to = 9L) int uiStatus, int topMarginPx, int bottomMarginPx);

③.配置網(wǎng)絡狀態(tài)提供者.
考慮到開發(fā)者項目中都有自己的網(wǎng)絡狀態(tài)監(jiān)聽,、判斷的工具類,

所以UiStatus沒有必要額外編輯這段功能代碼,,僅需要開發(fā)者配置一個回調(diào)即可,。

配置網(wǎng)絡狀態(tài)提供者后,在請求顯示普通的狀態(tài)時如果是沒有網(wǎng)絡那么將自動重定向到NETWORK_ERROR網(wǎng)絡錯誤狀態(tài)界面,。

具體配置方法如下:

UiStatusNetworkStatusProvider

        .getInstance()

        .registerOnRequestNetworkStatusEvent(OnRequestNetworkStatusEvent networkStatusEvent);

3.具體使用

UiStatus可以使用在任何Activity,、View以及Fragment中.
①.Activity中:

UiStatusController.get().bind(activity);

②.View中:

UiStatusController.get().bind(view);

③.Fragment中:
由于Fragment的特殊性,所以這里稍微麻煩一點點:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view;

        //你的視圖初始化...

        mUiStatusController = UiStatusController.get();

        return mUiStatusController.bindFragment(view);

}

看以看出這里是使用 bindFragment(view) 方法將原本的內(nèi)容視圖傳遞給UiStatus,,并將該方法返回的控件作為 onCreateView 的返回值即可,。

④.視圖狀態(tài)切換:
對于普通視圖切換使用

UiStatusController.changeUiStatusIgnore(uiStatus)切換,;

對于Widget視圖使用UiStatusController.showWidget(uiStatus)進行顯示;

或者使用其重載方法showWidget(uiStatus,duration)方法進行顯示,,使用該方法時會在duration時間后自動隱藏,;

也可以使用UiStatusController.hideWidget()方法進行隱藏Widget小部件。

4.成功

經(jīng)過上面的步驟之后您已經(jīng)成功的集成并且可以使用UiStatus庫了,,并且您肯定也看到了想要看到的各種狀態(tài)下的視圖成功切換,。

如果您不需要某些頁面的個性化定制,那么到這里就OK了,;否則請看下面的步驟會滿足你的需求,。

5.個性化配置

一般情況下使用在Application中的全局配置已經(jīng)能滿足大部分頁面視圖狀態(tài)的需求,
如果某些個別界面需要特殊配置那么UiStatus也是支持的,。

只需要使用持有的UiStatusController對象,調(diào)用其addUiStatusConfig()或其他任何可以在全局配置中使用的方法重新配置即可,。

6.優(yōu)化

一般的開發(fā)者只需要在自定義的Application中全局配置一次即可,,并且對于LOADING、LOAD_ERROR,、EMPTY,、NOT_FOUND、CONTENT這些普通視圖的切換可以下沉到    統(tǒng)一在基類Activity,、Fragment或者網(wǎng)絡加載框架中處理,,具體使用大同小異,可參考Demo,,這里不再贅述,。

7.UiStatus可實現(xiàn)效果部分展示

注:圖片來自其他APP,僅供參考實現(xiàn)效果使用,。其他未列出效果不代表不能實現(xiàn),,具體可實現(xiàn)效果盡情發(fā)揮想象!??!

status_load_error

status_not_found

status_widget_network_error

status_widget_float

status_widget_elfin

status_widget_elfin_2

最后附上github鏈接,喜歡的可以點個贊
https://github.com/FengChenSunshine/UiStatus

智能推薦

MusicLibrary:一個豐富的音樂播放封裝庫

Android 基于 glide 4.0 封裝圖片加載庫

少年郎,,你需要封裝好的 ViewPager 工具類

是時候該封裝一個自己的庫了

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多