Skip to content

Commit

Permalink
修复外层无法传入特定类名来取消悬浮窗问题
Browse files Browse the repository at this point in the history
新增判断当前是否有特定悬浮窗正在显示的 API
  • Loading branch information
getActivity committed Jul 9, 2024
1 parent 46053d3 commit 60abd21
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 27 deletions.
33 changes: 15 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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'
}
```

Expand Down Expand Up @@ -183,7 +183,7 @@ public final class ActivityWindowLifecycle implements Application.ActivityLifecy

* 对象方法

```
```java
// 设置悬浮窗宽度
setWidth(int width)
// 设置悬浮窗高度
Expand Down Expand Up @@ -220,12 +220,12 @@ setWindowType(int type)

* 静态方法

```
```java
// 取消所有正在显示的悬浮窗
EasyWindow.cancelAll()

// 取消特定类名的悬浮窗
EasyWindow.cancelByClass(Class<EasyWindow<?>> clazz)
EasyWindow.cancelByClass(Class<? extends EasyWindow<?>> clazz)

// 取消特定标记的悬浮窗
EasyWindow.cancelByTag(String tag)
Expand All @@ -234,10 +234,19 @@ EasyWindow.cancelByTag(String tag)
EasyWindow.recycleAll()

// 回收特定类名的悬浮窗
EasyWindow.recycleByClass(Class<EasyWindow<?>> clazz)
EasyWindow.recycleByClass(Class<? extends EasyWindow<?>> clazz)

// 回收特定标记的悬浮窗
EasyWindow.recycleByTag(String tag)

// 判断当前是否有悬浮窗正在显示
EasyWindow.existShowing()

// 判断当前是否有特定类名的悬浮窗正在显示
EasyWindow.existShowingByClass(Class<? extends EasyWindow<?>> clazz)

// 判断当前是否有特定标记的悬浮窗正在显示
EasyWindow.existShowingByTag(String tag)
```

#### 框架混淆规则
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ android {

defaultConfig {
minSdkVersion 14
versionCode 1006
versionName "10.6"
versionCode 1062
versionName "10.62"
}

// 支持 JDK 1.8
Expand Down
72 changes: 68 additions & 4 deletions library/src/main/java/com/hjq/window/EasyWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public static synchronized void cancelAll() {
/**
* 取消特定类名的悬浮窗
*/
public static synchronized void cancelByClass(Class<EasyWindow<?>> clazz) {
public static synchronized void cancelByClass(Class<? extends EasyWindow<?>> clazz) {
if (clazz == null) {
return;
}
Expand Down Expand Up @@ -131,7 +131,7 @@ public static synchronized void recycleAll() {
/**
* 回收特定类名的悬浮窗
*/
public static void recycleByClass(Class<EasyWindow<?>> clazz) {
public static synchronized void recycleByClass(Class<? extends EasyWindow<?>> clazz) {
if (clazz == null) {
return;
}
Expand All @@ -155,7 +155,7 @@ public static void recycleByClass(Class<EasyWindow<?>> clazz) {
/**
* 回收特定标记的悬浮窗
*/
public static void recycleByTag(String tag) {
public static synchronized void recycleByTag(String tag) {
if (tag == null) {
return;
}
Expand All @@ -177,6 +177,71 @@ public static void recycleByTag(String tag) {
}
}

/**
* 判断当前是否有悬浮窗正在显示
*/
public static synchronized boolean existShowing() {
Iterator<EasyWindow<?>> 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<? extends EasyWindow<?>> clazz) {
if (clazz == null) {
return false;
}
Iterator<EasyWindow<?>> 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<EasyWindow<?>> 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;
/** 根布局 */
Expand Down Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
include ':app', ':library'
include ':app', ':library'

0 comments on commit 60abd21

Please sign in to comment.