Skip to content
🌟 Pudding use WindowManager(don't need request permission) to pull down a view that are displayed on top their attached window
Branch: master
Clone or download
Latest commit 14d2d17 May 5, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea update readme Mar 28, 2019
app update dependency Mar 22, 2019
demogif gif description Mar 21, 2019
gradle/wrapper rename project Mar 18, 2019
pudding clean static map May 2, 2019
.gitignore rename project Mar 18, 2019
LICENSE update license Mar 20, 2019 new version May 5, 2019 update readme Mar 28, 2019
build.gradle update dependency Mar 22, 2019 rename project Mar 18, 2019
gradlew rename project Mar 18, 2019
gradlew.bat rename project Mar 18, 2019
settings.gradle update dependency Mar 22, 2019


代替Toast/SnackBar新方式,使用WindowManager 无需申请权限




allprojects {
    repositories {
     maven { url '' }
   implementation 'com.github.o0o0oo00:Pudding:1.2.0'

GIF可能要等会就顺畅了,一开始可能会比较迟钝 (●゚ω゚●)


Common configurable Pudding

Pudding.create(this) {
    setTitle("This is Title")
    setText("this is text")
Pudding.create(this) {
Pudding.create(this) {
    setTitle("Choco Title")
    setText("this is text")
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()


With FancyDialog, Pudding can be displayed above the shadow of Dialog.


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


  1. 两种addView方式

    • activity decorView
    • windowManager
      • 动画显示
      • 生命周期控制
      • 有权限/无权限情况 (考虑到这个需求不是很大,而且每个项目的权限适配都不一致,而且国产手机权限这一块参差不齐,所以决定不做这一块了,对功能也没影响)
      • 各个版本的适配
  2. 内部显示队列(考虑可以使用kotlin通道来实现)

    • 上一条未消失时,后来一条等待
    • 直接顶掉上一条,上一条渐变消失
  3. 左右/上下滑动消失动画

    • 上下消失
    • 左右滑动消失
  4. Pudding cover dialog


  • Pudding使用的是WindowManager 难道不需要申请权限吗?

    • Pudding使用WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL的层级低于系统级层级TYPE_SYSTEM_ALERT也就是在2000之下,是不需要申请权限的。
  • 不同的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()
You can’t perform that action at this time.