AnyLayer

项目地址:goweii/AnyLayer 

简介:用于替代 Android 自带 Dialog 和 PopupWindow

更多:作者   提 Bug   官网   

标签:

 

用于替代 Android 自带 Dialog 和 PopupWindow

GitHub 主页

Demo 下载

简介

  • 链式调用
  • 可实现 Dialog 效果
  • 可实现 PopupWindow 效果
  • 可实现悬浮菜单效果
  • 可自定义数据绑定
  • 可自定义进出场动画
  • 可自由控制显示大小和位置
  • 可自定义背景变暗或者显示图片
  • 可一行代码实现背景高斯模糊
  • 占用区域不会超过当前 Activity,避免导航栏遮挡问题
  • PopupWindow 效果时可跟随目标 View 移动
  • 可全局弹出
  • 可从 ApplicationContext 弹出

从 2.4.0 版本开始,添加了一个通用弹窗库,里面会封装一些比较常见的弹窗,不定期更新,已有通用弹窗:

  • 提示弹窗
  • 列表弹窗(可实现单选和菜单效果)
  • 加载中弹窗
  • 菜单弹窗(ToolBar 右上角的更多菜单)

求职(2019-05-30~今)

感觉最近不是招聘旺季,大多数职位都停止招聘了。唉,离职时间不赶趟呀。

有没有大佬有内推的,欢迎联系。

QQ:302833254

E-mail:goweii@163.com

说明

可以看到我的 GitHub 上面有 3 个功能比较类似的可以实现弹窗的框架。分别为 AnyDialog、AnyLayer 和 FloatingLayer。可能大家有点混淆,为什么同一个功能要写 3 个框架?为了骗点击数?在这里向大家说明下每个框架的针对点。

首先是 AnyDialog,他继承自 Dialog,目的是方便 Dialog 的创建和使用。

再者是 FloatingLayer,他是 AnyLayer 的一个最初版,写他的目的是因为有时候 Dialog 会被导航栏遮挡,或者 Dialog 的出现消失动画会经过黑色的导航栏区域,看着很不爽,很别扭。所以就想如果 Dialog 的范围能和当前的 Activity 的显示范围一样就好了,因此写了一个 FloatingLayer,让他依附于 Activity,控制一个 View 的动态添加和移除。

最后是 AnyLayer,随着 FloatingLayer 的完善,我重构了代码,分离出了 3 个关键类,让他不再仅为实现 Dialog 效果,还可以实现 PopupWindow 和悬浮菜单等效果。因此我觉得有必要给他一个新的名字了,也是为了和 AnyDialog 相呼应,因此定名为 AnyLayer。

所以可以看出,FloatingLayer 其实已经停止维护,AnyDialog 还是建议用于普通的 Dialog 弹窗,而 AnyLayer 则是去替代一些浮动窗口的显示。

截图

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

使用说明

集成

  • 添加 jitpack 库

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

    点击查看最新版本号 从 2.3.1 版本开始,版本号前不加 v,引用时需要注意。

    // build.gradle(Module:)dependencies {  // 完整引入  implementation 'com.github.goweii:AnyLayer:2.5.0'  // 基础库  implementation 'com.github.goweii.AnyLayer:anylayer:2.5.0'  // 通用弹窗(依赖基础库)  implementation 'com.github.goweii.AnyLayer:anylayer-common:2.5.0'}

调用

Dialog 效果

AnyLayer.with(this)        .contentView(R.layout.dialog_test_2)        .bindData(new LayerManager.IDataBinder() {            @Override            public void bind(AnyLayer anyLayer) {                // TODO 绑定数据            }        })        .backgroundColorRes(R.color.dialog_bg)        .onClickToDismiss(R.id.fl_dialog_yes, R.id.fl_dialog_no)        .show();
AnyLayer.target(targetView)        .contentView(R.layout.dialog_test_4)        .alignment(Alignment.Direction.VERTICAL, Alignment.Horizontal.CENTER, Alignment.Vertical.BELOW, true)        .backgroundColorRes(R.color.dialog_bg)        .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();

API

AnyLayer

构建一个弹窗

/** * 如果需要全局弹窗,必须现在 Application 中初始化 * 2.4.0 之后不再需要初始化也可全局弹窗 **/@Deprecatedpublic static void init(@NonNull Application application)/** * 有背景高斯模糊弹窗,建议提前调用该方法初始化 * 不用在 Application 调用,可放到启动页中进行,避免影响 APP 启动速度 * 也可在用到的 Activity 的 onCreate 方法中 **/public static void initBlurred(@NonNull Context context)/** * 有背景高斯模糊弹窗,在用到的 Activity 的 onCreate 方法中初始化后可在 onDestroy 中回收 **/public static void recycleBlurred()/** * 此时不需要 APP 存在 Activity 实例 * 会新启动一个 Activity 并向根布局添加一个浮层 */public static void with(@Nullable Context context, LayerActivity.OnLayerCreatedCallback callback)/** * 向窗口根布局添加一个浮层 * 需要在 Application 中调用{@link AnyLayer#init(Application)} **/public static AnyLayer with()/** * 向父布局 viewGroup 添加一个浮层 */public static AnyLayer with(@NonNull ViewGroup viewGroup)/** * 向窗口根布局添加一个浮层 **/public static AnyLayer with(@NonNull Context context)/** * 向窗口根布局添加一个浮层,且位置参照 targetView **/public static AnyLayer target(@NonNull View targetView)/** * 设置自定义 View **/public AnyLayer contentView(@NonNull View contentView)/** * 设置自定义布局文件 **/public AnyLayer contentView(@LayoutRes int contentViewId)/** * 设置自定义布局文件中状态栏的占位 View * 该控件高度将设置为状态栏高度,可用来使布局整体下移,避免状态栏遮挡 **/public AnyLayer asStatusBar(@IdRes int statusBarId)/** * 绑定数据 **/public AnyLayer bindData(LayerManager.IDataBinder dataBinder)/** * 设置显示状态改变的监听 **/public AnyLayer onVisibleChangeListener(LayerManager.OnVisibleChangeListener mOnVisibleChangeListener)/** * 设置变更为显示状态监听 **/public AnyLayer onLayerShowListener(LayerManager.OnLayerShowListener onLayerShowListener)/** * 设置变更为隐藏状态监听 **/public AnyLayer onLayerDismissListener(LayerManager.OnLayerDismissListener onLayerDismissListener)/** * 设置子布局的 gravity,可直接在布局文件指定 layout_gravity 属性,作用相同 **/public AnyLayer gravity(int gravity)/** * 当以 target 方式创建时为参照 View 位置显示 * 可自己指定浮层相对于参照 View 的对齐方式 * * @param direction  主方向 * @param horizontal 水平对齐方式 * @param vertical   垂直对齐方式 * @param inside     是否强制位于屏幕内部 **/public AnyLayer alignment(@NonNull Alignment.Direction direction,                          @NonNull Alignment.Horizontal horizontal,                          @NonNull Alignment.Vertical vertical,                          boolean inside)/** * 自定义浮层的进入和退出动画,可使用工具类{@link AnimHelper} **/public AnyLayer contentAnim(LayerManager.IAnim contentAnim)/** * 自定义浮层的进入动画 **/public AnyLayer contentInAnim(@AnimRes int anim)/** * 自定义浮层的进入动画 **/public AnyLayer contentInAnim(@NonNull Animation anim)/** * 自定义浮层的退出动画 **/public AnyLayer contentOutAnim(@AnimRes int anim)/** * 自定义浮层的退出动画 **/public AnyLayer contentOutAnim(@NonNull Animation anim)/** * 自定义背景的进入和退出动画,可使用工具类{@link AnimHelper} **/public AnyLayer backgroundAnim(LayerManager.IAnim backgroundAnim)/** * 自定义背景的进入动画 **/public AnyLayer backgroundInAnim(@AnimRes int anim)/** * 自定义背景的退出动画 **/public AnyLayer backgroundInAnim(@NonNull Animation anim)/** * 自定义背景的退出动画 **/public AnyLayer backgroundOutAnim(@AnimRes int anim)/** * 自定义背景的退出动画 **/public AnyLayer backgroundOutAnim(@NonNull Animation anim)/** * 默认浮层进入和退出动画时长 **/public AnyLayer defaultContentAnimDuration(long defaultAnimDuration)/** * 默认浮层进入动画时长 **/public AnyLayer defaultContentInAnimDuration(long defaultInAnimDuration)/** * 默认浮层退出动画时长 **/public AnyLayer defaultContentOutAnimDuration(long defaultOutAnimDuration)/** * 默认背景进入和退出动画时长 **/public AnyLayer defaultBackgroundAnimDuration(long defaultAnimDuration)/** * 默认背景进入动画时长 **/public AnyLayer defaultBackgroundInAnimDuration(long defaultInAnimDuration)/** * 默认背景退出动画时长 **/public AnyLayer defaultBackgroundOutAnimDuration(long defaultOutAnimDuration)/** * 设置背景为当前 activity 的高斯模糊效果 * 设置之后其他背景设置方法失效,仅{@link #backgroundColorInt(int)}生效 * 且设置的 backgroundColor 值调用 imageView.setColorFilter(backgroundColor)设置 * 建议此时的{@link #backgroundColorInt(int)}传入的为半透明颜色 * * @param radius 模糊半径 **/public AnyLayer backgroundBlurRadius(@FloatRange(from = 0, fromInclusive = false, to = 25) float radius)/** * 设置背景为当前 activity 的高斯模糊效果 * * @param radius 模糊的百分比(相较于短边) **/public AnyLayer backgroundBlurPercent(@FloatRange(from = 0, fromInclusive = false) float percent)/** * 设置背景高斯模糊的缩小比例 **/public AnyLayer backgroundBlurScale(@FloatRange(from = 1) float scale)/** * 设置背景图片 **/public AnyLayer backgroundBitmap(@NonNull Bitmap bitmap)/** * 设置背景资源 **/public AnyLayer backgroundResource(@DrawableRes int resource)/** * 设置背景 Drawable **/public AnyLayer backgroundDrawable(@NonNull Drawable drawable)/** * 设置背景颜色 * 在调用了{@link #backgroundBitmap(Bitmap)}或者{@link #backgroundBlurRadius(float)}方法后 * 该颜色值将调用 imageView.setColorFilter(backgroundColor)设置 * 建议此时传入的颜色为半透明颜色 * * @param colorInt 颜色值 **/public AnyLayer backgroundColorInt(@ColorInt int colorInt)/** * 设置背景颜色 **/public AnyLayer backgroundColorRes(@ColorRes int colorRes)/** * 设置浮层外部是否拦截触摸 * 默认为 true,false 则事件由 activityContent 本身消费 **/public AnyLayer outsideInterceptTouchEvent(boolean intercept)/** * 设置点击浮层以外区域是否可关闭 **/public AnyLayer cancelableOnTouchOutside(boolean cancelable)/** * 设置点击返回键是否可关闭 **/public AnyLayer cancelableOnClickKeyBack(boolean cancelable)/** * 对一个 View 绑定点击事件 **/public AnyLayer onClick(@IdRes int viewId,                         LayerManager.OnLayerClickListener listener)/** * 对一个 View 绑定点击事件,点击时直接隐藏浮层 **/public AnyLayer onClickToDismiss(@IdRes int viewId,                                  LayerManager.OnLayerClickListener listener)/** * 对多个 View 绑定点击事件 **/public AnyLayer onClick(LayerManager.OnLayerClickListener listener,                         @IdRes int viewId,                         @IdRes int... viewIds)/** * 对多个 View 绑定点击事件,点击时直接隐藏浮层 **/public AnyLayer onClickToDismiss(LayerManager.OnLayerClickListener listener,                                  @IdRes int viewId,                                  @IdRes int... viewIds)/** * 绑定该控件点击时直接隐藏浮层 **/public AnyLayer onClickToDismiss(@IdRes int viewId, @IdRes int... viewIds)/** * 获取浮层是否已显示 **/public boolean isShow()/** * 显示 **/public void show()/** * 隐藏 **/public void dismiss()/** * 获取 Context **/public Context getContext()/** * 获取布局子控件 **/public  V getView(@IdRes int viewId)/** * 获取 View 管理容器 **/public ViewHolder getViewHolder()/** * 获取自定义的浮层控件 **/public View getContentView()/** * 获取背景图 **/public ImageView getBackground()/** * 适配软键盘的弹出,布局自动上移 * 在某几个 EditText 获取焦点时布局上移 * 在{@link LayerManager.OnVisibleChangeListener#onShow(AnyLayer)}中调用 * 应该和{@link #removeSoftInput()}成对出现 * * @param editText 焦点 EditTexts **/public void compatSoftInput(EditText... editText)/** * 移除软键盘适配 * 在{@link LayerManager.OnVisibleChangeListener#onDismiss(AnyLayer)}中调用 * 应该和{@link #compatSoftInput(EditText...)}成对出现 **/public void removeSoftInput()

BaseLayer

采用继承的方式创建一个浮层,为方便通用浮层的封装,可在次基础上实现 MVP 模式。

/** * 获取布局 ID **/protected abstract int getLayoutId()/** * 获取上下文 **/protected Context getContext()/** * 获取父布局 **/protected ViewGroup getParent()/** * 获取参照 View **/protected View getTarget()/** * 创建时调用,可在此初始化 **/protected void onCreate()/** * 销毁时调用,可在此释放资源 **/protected boolean onDestroy()/** * 显示 **/public void show()/** * 隐藏 **/public void dismiss()

更多相关文章

  1. Android设置屏幕亮度及Alpha值
  2. Android美工坊--listview更改选中时item背景色
  3. android 线程优先级设置
  4. (转)Android中LocationManager的简单使用,获取当前位置
  5. android升级adt和sdk之后无法识别SDK Location的一个解决方式
  6. android listview每个item定义动画呈现
  7. android设置gps自动开启
  8. Android横屏,全屏设置
  9. Android保持背光常亮的设置方法

随机推荐

  1. Android Studio 下无法调用org.apache。
  2. 2014.01.10 ——— android listview 记
  3. 45个android实例源码,很好很强大
  4. Android(安卓)视频缩放/放大
  5. 获取显示窗口警告 android The method ge
  6. Android下载速度计算
  7. layout居中
  8. [置顶] android canvas 绘图笔记
  9. Android 无线连接及连接状态研究
  10. Android消息推送接收后,通知栏的显示