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
Permalink
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
README.md new version May 5, 2019
WIKIPAGE.md update readme Mar 28, 2019
build.gradle update dependency Mar 22, 2019
gradle.properties 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

README.md

Pudding

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

WIKI

中文说明

Usage

allprojects {
    repositories {
    ...
     maven { url 'https://jitpack.io' }
   implementation 'com.github.o0o0oo00:Pudding:1.2.0'

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

  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.