簡潔優雅可點選的 toast 控制元件,仿手機百度 9.0,無 BadTokenException 風險。
UniversalToast
簡介:簡潔優雅可點選的 toast 控制元件,仿手機百度 9.0,無 BadTokenException 風險。
標籤:
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
.
從左到右依次為UNIVERSAL
,EMPHASIZE
,CLICKABLE
樣式的 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,CLICKABLE
和UNIVERSAL
亦可)
注意:
由於 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