代替Toast/SnackBar新方式,使用WindowManager 无需申请权限
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
implementation 'com.github.o0o0oo00:Pudding:1.2.1'
GIF可能要等会就顺畅了,一开始可能会比较迟钝 (●゚ω゚●)
常见的可配置的几种形式
Common configurable Pudding
Pudding.create(this) {
setTitle("This is Title")
setText("this is text")
}.show()
Pudding.create(this) {
setChocoBackgroundColor(resources.getColor(R.color.colorAccent))
setTitleTypeface(Typeface.DEFAULT_BOLD)
}.show()
Pudding.create(this) {
setTitle("Choco Title")
setText("this is text")
setIcon(R.drawable.ic_event_available_black_24dp)
}.show()
Pudding.create(this) {
setTitle("Choco Title")
setText("This is Text , it's very short and I don't like short \n This is Text , it's very short and I don't like short")
onShow {
Toast.makeText(this@MainActivity, "onShowListener", Toast.LENGTH_SHORT).show()
}
onDismiss {
Toast.makeText(this@MainActivity, "onDismissListener", Toast.LENGTH_SHORT).show()
}
}.show()
配合FancyDialog可实现Pudding显示在Dialog的阴影之上
With FancyDialog, Pudding can be displayed above the shadow of Dialog.
每个Activity拥有各自的Pudding,互相之间不影响
Each Activity has its own Pudding, which does not affect each other.
*Imitate Alerter and ☆⌒(^-゜)v THX!! a lot
Use activity decorView we can show a view on top of Activity。but when dialog is showing , its black background will cover the view , that is not cool. so i create this repository to solve this problem , and I hope it's useful to you
- Use DSL style to config
Choco
- Show Queue
- Cover Dialog/PopWindow
- Don't need to request permission
-
两种addView方式
- activity decorView
- windowManager
- 动画显示
- 生命周期控制
- 有权限/无权限情况 (考虑到这个需求不是很大,而且每个项目的权限适配都不一致,而且国产手机权限这一块参差不齐,所以决定不做这一块了,对功能也没影响)
- 各个版本的适配
-
内部显示队列(考虑可以使用kotlin通道来实现)
- 上一条未消失时,后来一条等待
- 直接顶掉上一条,上一条渐变消失
-
左右/上下滑动消失动画
- 上下消失
- 左右滑动消失
-
Pudding cover dialog
- 配合FancyDialog实现
-
Pudding使用的是WindowManager 难道不需要申请权限吗?
- Pudding使用
WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL
的层级低于系统级层级TYPE_SYSTEM_ALERT
也就是在2000之下,是不需要申请权限的。
- Pudding使用
-
不同的Activity对应的WindowManager是否相同
- 不同的window,不同的WindowManager,相同的WindowManagerGlobal(最终实现view的添加、删除、更新)
-
不同的WindowManager为什么可以移除对方的View
- 因为所有的Activity共同只有一个WindowManagerGlobal(其内部持有所有添加的View的集合引用)
-
如何去维护一个Pudding队列
- 用一个
Map<string,pudding>
- 什么时间 去clear这个map (●゚ω゚●)挠头? when activity destory clean the key which is activity toString()
- 用一个