Pudding

Project Url: o0o0oo00/Pudding
Introduction: :star2: Pudding use WindowManager(don't need request permission) to pull down a view that are displayed on top their attached window
More: Author   ReportBugs   
Tags:

代替 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

  1. 两种 addView 方式

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

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

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

可能会有的疑问:

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

    • [x] Pudding使用WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL的层级低于系统级层级TYPE_SYSTEM_ALERT也就是在 2000 之下,是不需要申请权限的。
  • [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()
      
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools