GithubHelp home page GithubHelp logo

huanhailiuxin / sweettips Goto Github PK

View Code? Open in Web Editor NEW
136.0 6.0 17.0 4.24 MB

快意灵动的提示库,自定义Toast,Snackbar,一行代码搞定多重属性设置!

License: Apache License 2.0

Java 100.00%

sweettips's Introduction

SweetTips

快意灵动的提示库,自定义Toast,Snackbar,一行代码搞定多重属性设置!

为什么写这个库

详见简书: SweetTips: 快意灵动的Android提示库!

Android原生Toast及Design包中的Snackbar,实现一些常见需求比较繁琐:

Toast:

  • 原生Toast无法/不方便自定义显示时间;
  • 原生Toast,需要等待队列中前面的Toast实例显示完毕之后才可以显示,实时性差;
  • 原生Toast,想在正在显示的Toast实例上显示新的内容并设置新内容的显示时间,实现较繁琐;
  • 原生Toast,无法/不方便自定义动画;
  • Android系统版本过多,不同的厂商对系统的定制也很不同,同一段代码在不同的机器上,Toast的样式差异很大,不利于App的一致性体验;

Snackbar:

  • Design包中的Snackbar,无法自定义动画;

截屏

  

下载

使用

SweetToast:
  • 创建SweetToast实例
SweetToast toast = SweetToast.makeText(context,"backgroundResource");
SweetToast toast = SweetToast.makeText(context,"backgroundResource",Toast.LENGTH_SHORT);
SweetToast toast = SweetToast.makeText(customView);
  • 设置当前SweetToast实例的出入场动画(SDK系统内置资源)
SweetToast toast = SweetToast.makeText(context,"setWindowAnimations").setWindowAnimations(SweetToast.SweetToastWindowAnimations.AnimationTranslucent);
  • 设置当前SweetToast实例的出入场动画(App中自定义)
SweetToast toast = SweetToast.makeText(context,"setAnimations").setAnimations(R.anim.slide_in_left,R.anim.slide_out_left);
  • 设置当前SweetToast实例的显示位置
//左上
SweetToast.makeText(context,"leftTop", 1200).leftTop().show();
//右上
SweetToast.makeText(context,"rightTop", 1200).rightTop().show();
//左下
SweetToast.makeText(context,"leftBottom",1200).leftBottom().show();
//右下
SweetToast.makeText(context,"rightBottom",1200).rightBottom().show();
//上中
SweetToast.makeText(context,"topCenter",1200).topCenter().show();
//下中
SweetToast.makeText(context,"bottomCenter",1200).bottomCenter().show();
//左中
SweetToast.makeText(context,"leftCenter",1200).leftCenter().show();
//右中
SweetToast.makeText(context,"rightCenter",1200).rightCenter().show();
//正中
SweetToast.makeText(context,"center", 1200).center().show();
//指定View的上方
SweetToast.makeText(context,"layoutAbove",1200).layoutAbove(buttonTarget,statusHeight).show();
//指定View的下方
SweetToast.makeText(context,"layoutBellow",1200).layoutBellow(buttonTarget,statusHeight)show();
  • 设置当前SweetToast实例的对齐方式
SweetToast.makeText(context,"setGravity").setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL,0,0).show();
  • 设置当前SweetToast实例的horizontalMargin,verticalMargin值
SweetToast.makeText(context,"setMargin").setMargin(100f,32f).show();
  • 向当前SweetToast实例的mContentView中添加View
ImageView iv = new ImageView(context);
iv.setImageResource(R.mipmap.ic_launcher);
SweetToast.makeText(context,"Add View").addView(iv,0).show();
  • 设置当前SweetToast实例中TextView的文字颜色
SweetToast.makeText(context,"messageColor").messageColor(Color.GREEN).show();
  • 设置当前SweetToast实例中mContentView的背景颜色
SweetToast.makeText(context,"backgroundColor").backgroundColor(Color.GREEN).show();
  • 设置当前SweetToast实例的文字颜色及背景资源
SweetToast.makeText(context,"textColorAndBackground").textColorAndBackground(Color.GREEN,R.mipmap.ic_launcher).show();
  • 设置当前SweetToast实例的文字颜色及背景颜色
SweetToast.makeText(context,"colors").colors().show(Color.GREEN,Color.BLACK);
  • 设置当前SweetToast实例中mContentView的背景资源
SweetToast.makeText(context,"backgroundResource").backgroundResource(R.drawable.bg).show();
  • 设置当前SweetToast实例的最小宽高
SweetToast.makeText(context,"minSize").minSize(200,160).show();
  • 将当前实例添加到队列,若队列为空,则加入队列后直接进行展示
SweetToast.makeText(context,"show").show();
  • 利用队列中正在展示的SweetToast实例,继续展示当前SweetToast实例的内容
SweetToast.makeText(context,"showByPrevious").showByPrevious();
  • 清空队列中已经存在的SweetToast实例,直接展示当前SweetToast实例的内容
SweetToast.makeText(context,"showImmediate").showImmediate();
SweetSnackbar:
  • 设置SweetSnackbar实例的 入场动画 及 离场动画
SnackbarUtils.Long(buttonSnackbarCustomAnim,"Snackbar自定义动画").anim(R.anim.scale_enter,R.anim.scale_exit).show();
SnackbarUtils:
  • SweetSnackbar的工具类,链式调用,一行代码完成对多种属性的设置
  • 效果参照SnackbarUtils

注意:

  • SweetToast实例的动画分为两类,且两类动画互斥,有且必有其中一种会进行展示
  • 详见SweetToast中方法:setWindowAnimations,setAnimations

TODO:

  • 提升SweetToast出入场动画的兼容性

开发者:

  幻海流心
  Email: [email protected]
  简书: http://www.jianshu.com/users/5702e6847f31/latest_articles
  GitHub: https://github.com/HuanHaiLiuXin

sweettips's People

Contributors

huanhailiuxin avatar

Stargazers

 avatar  avatar  avatar  avatar Erha avatar  avatar  avatar  avatar AAWW avatar 扳手扳死你 avatar Minuhy avatar  avatar  avatar JoyYu avatar  avatar 果丹皮 avatar 胡萝卜须 avatar 戊戌白羊 avatar  avatar Alamo Saravali avatar tianhong1989 avatar  avatar everdom avatar What avatar 行一 avatar Mayday陈胖子 avatar 冷雪 avatar newYorkCity avatar qinkai avatar jeremy avatar mczhang13 avatar  avatar  avatar  avatar Rajkumar Magar avatar tutuan avatar gure avatar formula_one avatar fanqi avatar Tshine avatar 530 avatar daryl avatar Lic avatar metasaber avatar ldw_wow avatar su avatar wxk avatar  avatar  avatar Kim avatar Alan avatar Robin Lee avatar 程磊 avatar coco avatar nana avatar 圣书 avatar weileng avatar w568w avatar Phil avatar 旺蛋 avatar Doglex avatar dabuliu avatar 陈威 avatar  avatar fffffff avatar zbb avatar  avatar  avatar  avatar 俞正东 avatar  avatar  avatar KimKool avatar  avatar  avatar  avatar  avatar ZPengs avatar MALT avatar ganshenml avatar  avatar Pranav Lathigara avatar  avatar olimsw avatar 吴猫头 avatar  avatar zhangwy avatar 李伟杰 avatar kimi avatar 恰好你来 avatar zuoni avatar Android-Universal-Image-Loader avatar  avatar  avatar  avatar  avatar Sarah Johnson avatar coder avatar MDove avatar ZiMo(熊文财) avatar

Watchers

James Cloos avatar coder avatar Mayday陈胖子 avatar  avatar  avatar  avatar

sweettips's Issues

发现华为Android9.0,Demo能显示,但引用进工程却怎么也显示不了的解决方案

报错Unable to add window android.view.ViewRootImpl$W@6518342 -- permission denied for window type 2009,然而确定已经授权了。后面查了下,官方文档具体如下:

使用 SYSTEM_ALERT_WINDOW 权限的应用无法再使用以下窗口类型来在其他应用和系统窗口上方显示提醒窗口:

TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_OVERLAY
TYPE_SYSTEM_ERROR
相反,应用必须使用名为 TYPE_APPLICATION_OVERLAY 的新窗口类型。

使用 TYPE_APPLICATION_OVERLAY 窗口类型显示应用的提醒窗口时,请记住新窗口类型的以下特性:

应用的提醒窗口始终显示在状态栏和输入法等关键系统窗口的下面。
系统可以移动使用 TYPE_APPLICATION_OVERLAY 窗口类型的窗口或调整其大小,以改善屏幕显示效果。
通过打开通知栏,用户可以访问设置来阻止应用显示使用 TYPE_APPLICATION_OVERLAY 窗口类型显示的提醒窗口。
所以在设置type的时候增加判断即可:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
para.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
para.type = WindowManager.LayoutParams.TYPE_PHONE;
}

将判断加到SweetToast.java的initConfiguration(SweetToast sweetToast,int duration)里就可以正常显示了。
定位这个问题花了些时间,这里说下,希望能帮助到有同样问题的伙伴。

Toast背景颜色

在5.0以下背景色不变,public SweetToast backgroundColor(@ColorInt int backgroundColor){
if(mContentView!=null){
mContentView.setBackgroundDrawable(getBackgroundDrawable(this, backgroundColor));
}
return this;
}

改成mContentView.setBackgroundColor(backgroundColor);背景色改变,但是圆角消失,传参数时,是不是传drawable对象比较好

最新这一版有BUG

原来的旧版我运行项目能在魅蓝note2上面显示,新版的我下载项目和APK等都不能在魅蓝note2上面显示。只有第一个toast能显示。不知道什么问题,我引用AAR到项目中也不行的。

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.