Giter Site home page Giter Site logo

bboylin / universaltoast Goto Github PK

View Code? Open in Web Editor NEW
743.0 15.0 92.0 3.07 MB

简洁优雅可点击的toast控件,无BadTokenException风险,关闭通知权限依然正常显示。An elegant and flexible toast which can handle click event , avoid BadTokenException and run fine without notification permission

Java 100.00%
toast android permission click

universaltoast's Introduction

UniversalToast:一个简洁优雅的toast组件,支持点击和GIF&安全

features

  • 优雅 & 灵活
  • 可点击 & 可随意设置显示时长
  • 主动避免android 7.0使用toast可能出现的BadTokenException
  • 关闭通知权限后依然可以正常弹出
  • 支持加载GIF,让你的toast更生动

Usages

  • step 1 : 添加依赖
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
UniversalToast.makeText(context, text, duration).show();
UniversalToast.makeText(context, text, duration,type).show();

duration 应该是UniversalToast.LENGTH_LONGUniversalToast.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()即可采用对应的图标。

从左到右依次为 : showSuccessshowWarningshowError 的图标(这里只展示了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

universaltoast's People

Contributors

bboylin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

universaltoast's Issues

可点击的toast在genymotion模拟器上会直接闪退,在真机上会没反应。

01-18 02:16:39.026 31245-31245/xyz.bboylin.universaltoast E/AndroidRuntime: FATAL EXCEPTION: main
Process: xyz.bboylin.universaltoast, PID: 31245
android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@55a4feb -- permission denied for window type 2002
at android.view.ViewRootImpl.setView(ViewRootImpl.java:703)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at xyz.bboylin.universialtoast.UniversalToast.show(UniversalToast.java:273)
at xyz.bboylin.universialtoast.UniversalToast.showError(UniversalToast.java:302)
at xyz.bboylin.universaltoast.MainActivity$2.onItemClick(MainActivity.java:85)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1156)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3121)
at android.widget.AbsListView$3.run(AbsListView.java:4036)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

经过测试需要把WinDowManage设置type那行代码注释掉,真机和genymotion都可运行了。

demo项目和library项目的包名一样

你的demo项目和library项目的包名一样了,这样可能会导致clone下来的项目编译可能会发生异常,建议修改下demo项目的包名。

异常是

Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define Lxyz/bboylin/universaltoast/BuildConfig;

无需动态申请权限的方式不友好

从用户体验来看,当需要弹出可以点击的Toast时,还给用户整个自己开启权限的界面,会影响用户使用。个人建议还是升级为自动申请动态权限,在application中调用init来初始化。

Error inflating class com.facebook.drawee.view.SimpleDraweeView

android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.facebook.drawee.view.SimpleDraweeView at android.view.LayoutInflater.inflate(LayoutInflater.java:543) at android.view.LayoutInflater.inflate(LayoutInflater.java:427) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at xyz.bboylin.universialtoast.SystemToast.makeText(SystemToast.java:75) at xyz.bboylin.universialtoast.UniversalToast.makeText(UniversalToast.java:55)

请问这种是什么问题呢?
我的依赖里面也引入了
implementation 'com.facebook.fresco:fresco:1.10.0' implementation 'com.facebook.fresco:animated-gif:1.10.0'

运行出现依赖冲突

运行报下面如图错误,百度了说大概是依赖包出现冲突,我as和作者一样的3.0.1.

20180119140137

异常

image
image
大神您好,麻烦您了。按照您说的,我传入的activity还是报错,求解,谢谢谢谢。(小米,华为没有问题,vivo和OPPO会有异常)

在小米手机上运行,所有可点击Toast都崩溃

手机 MIX2
系统: Android 8.0
日志:

Process: xyz.bboylin.universaltoast, PID: 1999
                                                                          android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@2a4e321 -- permission denied for window type 2002
                                                                              at android.view.ViewRootImpl.setView(ViewRootImpl.java:809)
                                                                              at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:359)
                                                                              at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
                                                                              at xyz.bboylin.universialtoast.UniversalToast.show(UniversalToast.java:273)
                                                                              at xyz.bboylin.universialtoast.UniversalToast.showSuccess(UniversalToast.java:297)
                                                                              at xyz.bboylin.demo.MainActivity$2.onItemClick(MainActivity.java:76)
                                                                              at android.widget.AdapterView.performItemClick(AdapterView.java:318)
                                                                              at android.widget.AbsListView.performItemClick(AbsListView.java:1188)
                                                                              at android.widget.AbsListView$PerformClick.run(AbsListView.java:3172)
                                                                              at android.widget.AbsListView$3.run(AbsListView.java:4153)
                                                                              at android.os.Handler.handleCallback(Handler.java:789)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                              at android.os.Looper.loop(Looper.java:164)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:6665)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)

不能防止重复点击

改依赖是否可以设置为单例模式,每次用户多次点击了,toast会一直显示中,

求解

你好,大神我下载来改sdk版本改为25.0.0的话,有没有问题?
只会到平常的功能,会不会崩溃啊?

发现一个bug

android.view.WindowLeaked: Activity com.gxkeji.obk.WelcomeActivity has leaked window android.widget.LinearLayout{d141a60 V.E...... ......ID 0,0-196,111} that was originally added here
at android.view.ViewRootImpl.(ViewRootImpl.java:422)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
at com.gxkeji.obk.base.toast.CustomToast.show(CustomToast.java:174)
at com.gxkeji.obk.tools.GlobalTools.showToastCenter(GlobalTools.java:302)
at com.gxkeji.obk.WelcomeActivity.jumpActivity(WelcomeActivity.java:91)

我的代码是
UniversalToast.makeText(context, hint, UniversalToast.LENGTH_SHORT, UniversalToast.UNIVERSAL)
.setGravity(Gravity.TOP
, 0, GlobalTools.getInstance().Dp2Px(context,distance))
// .setIcon(R.drawable.ic_done_white_24dp)
.show();
startActivity(new Intent(base, LoginActivity.class));
finish();

小米红米手机不能显示Toast

小米红米3
系统MIUI9
android 5.11
不开启悬浮窗不能下是Toast,什么都没有。

同小米 MIX2,MIUI9,Android 8.0。没有开悬浮窗权限,能正常显示

minSdkVersion 19

为什么限制 minSdkVersion 为 19 呢?什么地方不能兼容到4.4以下吗?

运行demo,无法响应点击事件

运行demo,无法响应点击事件:
每次都是toast弹窗后面List中的Item响应了点击,点击事件中的那句日志
Log.d("MainActivity", "toast clicked!!!")也没有输出。

XML报错

android.view.InflateException: Binary XML file line #11: Error inflating class com.facebook.drawee.view.SimpleDraweeView

我就是这样UniversalToast.makeText(this,"哈哈哈",UniversalToast.LENGTH_SHORT).show();简单的调用一下

单例模式

大佬,您的这个不是单例模式啊。

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.