diff --git a/README.md b/README.md index 86c94a9..e59779e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ * 博客地址:[悬浮窗需求终结者](https://www.jianshu.com/p/247d705b87b6) -* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/EasyWindow/releases/download/10.6/EasyWindow.apk) +* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/EasyWindow/releases/download/10.62/EasyWindow.apk) ![](picture/demo_code.png) @@ -49,7 +49,7 @@ android { dependencies { // 悬浮窗框架:https://github.com/getActivity/EasyWindow - implementation 'com.github.getActivity:EasyWindow:10.6' + implementation 'com.github.getActivity:EasyWindow:10.62' } ``` @@ -183,7 +183,7 @@ public final class ActivityWindowLifecycle implements Application.ActivityLifecy * 对象方法 -``` +```java // 设置悬浮窗宽度 setWidth(int width) // 设置悬浮窗高度 @@ -220,12 +220,12 @@ setWindowType(int type) * 静态方法 -``` +```java // 取消所有正在显示的悬浮窗 EasyWindow.cancelAll() // 取消特定类名的悬浮窗 -EasyWindow.cancelByClass(Class> clazz) +EasyWindow.cancelByClass(Class> clazz) // 取消特定标记的悬浮窗 EasyWindow.cancelByTag(String tag) @@ -234,10 +234,19 @@ EasyWindow.cancelByTag(String tag) EasyWindow.recycleAll() // 回收特定类名的悬浮窗 -EasyWindow.recycleByClass(Class> clazz) +EasyWindow.recycleByClass(Class> clazz) // 回收特定标记的悬浮窗 EasyWindow.recycleByTag(String tag) + +// 判断当前是否有悬浮窗正在显示 +EasyWindow.existShowing() + +// 判断当前是否有特定类名的悬浮窗正在显示 +EasyWindow.existShowingByClass(Class> clazz) + +// 判断当前是否有特定标记的悬浮窗正在显示 +EasyWindow.existShowingByTag(String tag) ``` #### 框架混淆规则 @@ -302,18 +311,6 @@ EasyWindow.recycleByTag(String tag) ![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_ali.png) ![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_wechat.png) -#### 广告区 - -* 我现在任腾讯云服务器推广大使,大家如果有购买服务器的需求,可以通过下面的链接购买 - -[![](https://upload-dianshi-1255598498.file.myqcloud.com/upload/nodir/345X200-9ae456f58874df499adf7c331c02cb0fed12b81d.jpg)](https://curl.qcloud.com/A6cYskvv) - -[【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中](https://curl.qcloud.com/A6cYskvv) - -[![](https://upload-dianshi-1255598498.file.myqcloud.com/345-200-b28f7dee9552f4241ea6a543f15a9798049701d4.jpg)](https://curl.qcloud.com/up4fQsdn) - -[【腾讯云】中小企业福利专场,多款刚需产品,满足企业通用场景需求](https://curl.qcloud.com/up4fQsdn) - ## License ```text diff --git a/app/build.gradle b/app/build.gradle index cffd98d..f5cc4a9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.hjq.window.demo" minSdkVersion 16 targetSdkVersion 33 - versionCode 1006 - versionName "10.6" + versionCode 1062 + versionName "10.62" } // 支持 Java JDK 8 diff --git a/library/build.gradle b/library/build.gradle index c5e416f..717d7c1 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -5,8 +5,8 @@ android { defaultConfig { minSdkVersion 14 - versionCode 1006 - versionName "10.6" + versionCode 1062 + versionName "10.62" } // 支持 JDK 1.8 diff --git a/library/src/main/java/com/hjq/window/EasyWindow.java b/library/src/main/java/com/hjq/window/EasyWindow.java index 3bd1d07..1b66496 100644 --- a/library/src/main/java/com/hjq/window/EasyWindow.java +++ b/library/src/main/java/com/hjq/window/EasyWindow.java @@ -77,7 +77,7 @@ public static synchronized void cancelAll() { /** * 取消特定类名的悬浮窗 */ - public static synchronized void cancelByClass(Class> clazz) { + public static synchronized void cancelByClass(Class> clazz) { if (clazz == null) { return; } @@ -131,7 +131,7 @@ public static synchronized void recycleAll() { /** * 回收特定类名的悬浮窗 */ - public static void recycleByClass(Class> clazz) { + public static synchronized void recycleByClass(Class> clazz) { if (clazz == null) { return; } @@ -155,7 +155,7 @@ public static void recycleByClass(Class> clazz) { /** * 回收特定标记的悬浮窗 */ - public static void recycleByTag(String tag) { + public static synchronized void recycleByTag(String tag) { if (tag == null) { return; } @@ -177,6 +177,71 @@ public static void recycleByTag(String tag) { } } + /** + * 判断当前是否有悬浮窗正在显示 + */ + public static synchronized boolean existShowing() { + Iterator> iterator = sWindowInstanceSet.iterator(); + while (iterator.hasNext()) { + EasyWindow easyWindow = iterator.next(); + if (easyWindow == null) { + continue; + } + + if (easyWindow.isShowing()) { + return true; + } + } + return false; + } + + /** + * 判断当前是否有特定类名的悬浮窗正在显示 + */ + public static synchronized boolean existShowingByClass(Class> clazz) { + if (clazz == null) { + return false; + } + Iterator> iterator = sWindowInstanceSet.iterator(); + while (iterator.hasNext()) { + EasyWindow easyWindow = iterator.next(); + if (easyWindow == null) { + continue; + } + if (!clazz.equals(easyWindow.getClass())) { + continue; + } + if (easyWindow.isShowing()) { + return true; + } + } + return false; + } + + /** + * 判断当前是否有特定标记的悬浮窗正在显示 + */ + public static synchronized boolean existShowingByTag(String tag) { + if (tag == null) { + return false; + } + + Iterator> iterator = sWindowInstanceSet.iterator(); + while (iterator.hasNext()) { + EasyWindow easyWindow = iterator.next(); + if (easyWindow == null) { + continue; + } + if (!tag.equals(easyWindow.getTag())) { + continue; + } + if (easyWindow.isShowing()) { + return true; + } + } + return false; + } + /** 上下文 */ private Context mContext; /** 根布局 */ @@ -269,7 +334,6 @@ private EasyWindow(Context context) { // 需要注意的是设置了 FLAG_NOT_TOUCH_MODAL 必须要设置 FLAG_NOT_FOCUSABLE,否则就会导致用户按返回键无效 mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - // 将当前实例添加到静态集合中 sWindowInstanceSet.add(this); } diff --git a/settings.gradle b/settings.gradle index 85b59a4..b0c8eaa 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app', ':library' +include ':app', ':library' \ No newline at end of file