AnyLayer

Project Url: goweii/AnyLayer
Introduction: 用于替代 Android 自带 Dialog 和 PopupWindow
More: Author   ReportBugs   OfficialWebsite   
Tags:

Android 稳定高效的浮层创建管理框架。

可取代系统自带 Dialog/Popup/BottomSheet 等弹窗,可实现单 Activity 架构的 Toast 提示,可定制任意样式的 Guide 引导层,可实现依附 Activity 的 Float 悬浮按钮。

GitHub 主页

Demo 下载

简介

  • 同时兼容 support 和 androidx
  • 链式调用
  • 支持自由扩展
  • 实现几种常用效果
    • Dialog 效果
      • 占用区域不会超过当前 Activity 避免导航栏遮挡
      • 支持自定义大小和显示位置
      • 支持自定义数据绑定
      • 支持自定义进出场动画
      • 支持自定义背景颜色/图片/高斯模糊
      • 支持在 Activity 的 onCreate 生命周期弹出
      • 支持从 ApplicationContext 中弹出
    • Popup 效果
      • 拥有 Dialog 效果特性
      • 支持跟随目标 View 移动
    • Toast 效果
      • 支持自定义图标和文字
      • 支持自定义显示时长
      • 支持自定义位置
      • 支持自定义背景资源和颜色
      • 支持自定义透明度
      • 支持自定义进出场动画
    • Guide 效果
      • 引导层效果待开发
    • Float
      • 悬浮按钮效果待开发

说明

详细原理和使用说明本人会在后续补上,但因个人开发,时间不定,请谅解。

或有大佬在看过源码后,愿意写下分析文章或使用说明来分享的,欢迎联系本人。写得比较详细的本人将会放到 README 中供大家查阅,提前谢过。

当然也欢迎加好友共同探讨,共同进步。

QQ:302833254

QQ 群:147715512(爱 Android)

截图

截图效果较差且版本较老,建议下载 Demo体验最新功能

anylayer.gif

使用说明

集成

  • 添加 jitpack 库

// build.gradle(Project:)
allprojects {
    repositories {
        ...
            maven { url 'https://www.jitpack.io' }
    }
}
  • 添加依赖

    点击查看最新版本号

    引用时需注意版本号,从 2.3.1 版本开始,版本号前不加 v。

    通用库为在 2.4.0 版本新增,有效引用为 2.4.0~2.5.0 之间版本。

    因框架重构,在 3.0.0 版本中暂时删除通用库,会在后续添加。

    从 3.1.0 版本开始移除 support-v7 依赖,可同时兼容 support 和 androidx

    因重构代码变化较大,不建议使用较多的老项目升级,保持 2.5.0 版即可,在实现 Dialog/Popup/BottomSheet 等效果上无本质差别。

// build.gradle(Module:)
dependencies {
    // 完整引入
    implementation 'com.github.goweii:AnyLayer:3.2.0'

    // 基础库
    // implementation 'com.github.goweii.AnyLayer:anylayer:2.5.0'

    // 通用弹窗(依赖基础库)
    // 从 3.0.0 版本暂时删除
    // implementation 'com.github.goweii.AnyLayer:anylayer-common:2.5.0'
}

使用

Dialog 效果

AnyLayer.dialog(this)
        .contentView(R.layout.dialog_test_2)
        .backgroundColorRes(R.color.dialog_bg)
        .gravity(Gravity.CENTER)
        .cancelableOnTouchOutside(true)
        .cancelableOnClickKeyBack(true)
        .bindData(new Layer.DataBinder() {
            @Override
            public void bindData(Layer layer) {
                // TODO 绑定数据
            }
        })
        .onClickToDismiss(R.id.fl_dialog_no)
        .show();
AnyLayer.popup(targetView)
        .contentView(R.layout.dialog_test_4)
        .outsideInterceptTouchEvent(false)    // 是否阻塞底部 activity 触摸事件
        .backgroundColorRes(R.color.dialog_bg)
        .alignment(Alignment.Direction.VERTICAL, Alignment.Horizontal.CENTER, Alignment.Vertical.BELOW, true)
        .contentAnim(new LayerManager.IAnim() {
            @Override
            public Animator inAnim(View content) {
                return AnimHelper.createTopInAnim(content);
            }

            @Override
            public Animator outAnim(View content) {
                return AnimHelper.createTopOutAnim(content);
            }
        })
        .show();

Toast 效果

AnyLayer.toast()
        .duration(3000)
        .icon(isSucc ? R.drawable.ic_success : R.drawable.ic_fail)
        .message(isSucc ? "哈哈,成功了" : "哎呀,失败了")
        .show();

Guide 效果

// TODO 待实现
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea