1. 程式人生 > >簡潔優雅可點選的 toast 控制元件,仿手機百度 9.0,無 BadTokenException 風險。

簡潔優雅可點選的 toast 控制元件,仿手機百度 9.0,無 BadTokenException 風險。

UniversalToast

專案地址:bboylin/UniversalToast 

簡介:簡潔優雅可點選的 toast 控制元件,仿手機百度 9.0,無 BadTokenException 風險。

更多:作者   提 Bug   

標籤:

 

UniversalToast:一個簡潔優雅的 toast 元件,支援點選和 GIF&安全

features

  • 優雅 & 靈活
  • 可點選 & 可隨意設定顯示時長
  • 主動避免 android 7.0 使用 toast 可能出現的 BadTokenException
  • 關閉通知許可權後依然可以正常彈出
  • 支援載入 GIF,讓你的 toast 更生動

Usages

  • step 1 : 新增依賴 ```gradle allprojects { repositories {
      ......
      maven { url 'https://jitpack.io' }
    
    } }

dependencies { ...... implementation 'com.github.bboylin:UniversalToast:v1.0.9' // 請新增上 fresco 的依賴,可以把 fresco 版本替換成最新的 implementation 'com.facebook.fresco:fresco:1.10.0' implementation 'com.facebook.fresco:animated-gif:1.10.0' }


* step 2 : api 類似原生 toast
```java
UniversalToast.makeText(context, text, duration).show();
UniversalToast.makeText(context, text, duration,type).show();

duration 應該是UniversalToast.LENGTH_LONG 和UniversalToast.LENGTH_SHORT其中之一, type 應該是 UniversalToast.UNIVERSAL , UniversalToast.EMPHASIZE

 , UniversalToast.CLICKABLE 三者之一 , 未指定則預設為 UniversalToast.UNIVERSAL.

  

從左到右依次為UNIVERSALEMPHASIZECLICKABLE樣式的 toast,圖示文字可設定。

  • 更多 API:

設定 duration 和設定動畫的方法被廢棄掉了,因為:

  • 不建議自己修改 toast 顯示時長
  • 在 android framework 裡限制了 windowAnimations 必須是系統動畫。
//example
UniversalToast.makeText(context, text, UniversalToast.LENGTH_SHORT, UniversalToast.CLICKABLE)
              .setGravity(gravity,xOffset,yOffset)
              .setBackground(drawable) // 設定背景
              .setColor(R.color.my_color) // 設定背景色
              .setLeftIconRes(R.drawable.my_ic) // 設定 icon,未呼叫的話 icon 不可見(gone)
              .setLeftGifUri(uri) // 設定 gif 的 uri,設定後 setLeftIconRes 方法會失效,即優先展示 gif
              .setClickCallback(text,R.drawable.my_btn,onClickListener) //設定點選 listener
              .show();

有三種預設的圖示提供,用showSuccess(),showWarning() , showError()代替show()即可採用對應的圖示。

  

從左到右依次為 : showSuccess , showWarning , showError 的圖示(這裡只展示了EMPHASIZE型別的 toast,CLICKABLEUNIVERSAL亦可)

注意:

由於 Android 8.0 對懸浮窗許可權的限制,使用可點選的 toast(即UniversalToast.CLICKABLE)必須允許懸浮窗許可權:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

關於如何動態申請許可權請參考 demo。
Android 8.0 以下無需懸浮窗許可權。

minSdkVersion>=14

notice :

如果你遇到 activity finish 的時候 toast cancel 出現 bug:

請將此處你的 application context 改為 activity 的 context

感謝 : ToastCompat

更新:

沒想到有這麼多人沒用過 fresco。。。在 application 初始化的時候記得初始化 fresco:

Fresco.initialize(ctx);

不想引入 fresco 就把版本換成 1.0.8