Pudding
代替 Toast/SnackBar 新方式,使用 WindowManager 无需申请权限
WIKI
Usage
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
what's different
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
Something new
- Use DSL style to config
Choco
- Show Queue
- Cover Dialog/PopWindow
- Don't need to request permission
TODO
两种 addView 方式
- [x] activity decorView
- [x] windowManager
- [x] 动画显示
- [x] 生命周期控制
- [x] 有权限/无权限情况 (考虑到这个需求不是很大,而且每个项目的权限适配都不一致,而且国产手机权限这一块参差不齐,所以决定不做这一块了,对功能也没影响)
- [x] 各个版本的适配
内部显示队列(考虑可以使用 kotlin 通道来实现)
- [x] 上一条未消失时,后来一条等待
- [x] 直接顶掉上一条,上一条渐变消失
左右/上下滑动消失动画
- [x] 上下消失
- [x] 左右滑动消失
Pudding cover dialog
- [x] 配合FancyDialog实现
可能会有的疑问:
[x] Pudding使用的是 WindowManager 难道不需要申请权限吗?
- [x] Pudding使用
WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL
的层级低于系统级层级TYPE_SYSTEM_ALERT
也就是在 2000 之下,是不需要申请权限的。
- [x] Pudding使用
[x] 不同的 Activity 对应的 WindowManager 是否相同
- [x] 不同的 window,不同的 WindowManager,相同的 WindowManagerGlobal(最终实现 view 的添加、删除、更新)
[x] 不同的 WindowManager 为什么可以移除对方的 View
- [x] 因为所有的 Activity 共同只有一个 WindowManagerGlobal(其内部持有所有添加的 View 的集合引用)
[X] 如何去维护一个 Pudding 队列
- [x] 用一个
Map<string,pudding>
- [X] 什么时间 去 clear 这个 map (●゚ω゚●)挠头?
when activity destory clean the key which is activity toString()
- [x] 用一个