Skip to content

Commit a192c89

Browse files
committed
新增 with 静态方法(用于代替直接 new 对象)
1 parent 31e8f86 commit a192c89

File tree

6 files changed

+59
-25
lines changed

6 files changed

+59
-25
lines changed

README.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
* 博客地址:[悬浮窗需求终结者](https://www.jianshu.com/p/247d705b87b6)
66

7-
* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/EasyWindow/releases/download/10.2/EasyWindow.apk)
7+
* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/EasyWindow/releases/download/10.3/EasyWindow.apk)
88

99
![](picture/demo_code.png)
1010

@@ -49,7 +49,7 @@ android {
4949
5050
dependencies {
5151
// 悬浮窗框架:https://github.com/getActivity/EasyWindow
52-
implementation 'com.github.getActivity:EasyWindow:10.2'
52+
implementation 'com.github.getActivity:EasyWindow:10.3'
5353
}
5454
```
5555

@@ -60,7 +60,7 @@ dependencies {
6060
```java
6161
// 传入 Activity 对象表示设置成局部的,不需要有悬浮窗权限
6262
// 传入 Application 对象表示设置成全局的,但需要有悬浮窗权限
63-
new EasyWindow<>(this)
63+
EasyWindow.with(this)
6464
.setContentView(R.layout.toast_hint)
6565
// 设置成可拖拽的
6666
//.setDraggable()
@@ -90,7 +90,7 @@ new EasyWindow<>(this)
9090
* Kotlin 用法(二选一)
9191

9292
```kotlin
93-
EasyWindow<EasyWindow<*>>(activity).apply {
93+
EasyWindow.with(activity).apply {
9494
setContentView(R.layout.toast_hint)
9595
// 设置成可拖拽的
9696
//setDraggable()
@@ -114,7 +114,7 @@ EasyWindow<EasyWindow<*>>(activity).apply {
114114
```
115115

116116
```kotlin
117-
EasyWindow<EasyWindow<*>>(activity)
117+
EasyWindow.with(activity)
118118
.setContentView(R.layout.toast_hint)
119119
// 设置成可拖拽的
120120
//.setDraggable()
@@ -154,7 +154,7 @@ public final class ActivityWindowLifecycle implements Application.ActivityLifecy
154154

155155
@Override
156156
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
157-
new EasyWindow<>(activity)
157+
EasyWindow.with(activity)
158158
.setView(R.layout.xxx)
159159
.show();
160160
}
@@ -240,6 +240,14 @@ EasyWindow.recycleByClass(Class<EasyWindow<?>> clazz)
240240
EasyWindow.recycleByTag(String tag)
241241
```
242242

243+
#### 框架混淆规则
244+
245+
* 在混淆规则文件 `proguard-rules.pro` 中加入
246+
247+
```text
248+
-keep class com.hjq.window.** {*;}
249+
```
250+
243251
#### 作者的其他开源项目
244252

245253
* 安卓技术中台:[AndroidProject](https://github.com/getActivity/AndroidProject) ![](https://img.shields.io/github/stars/getActivity/AndroidProject.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidProject.svg)
@@ -254,14 +262,18 @@ EasyWindow.recycleByTag(String tag)
254262

255263
* 标题栏框架:[TitleBar](https://github.com/getActivity/TitleBar) ![](https://img.shields.io/github/stars/getActivity/TitleBar.svg) ![](https://img.shields.io/github/forks/getActivity/TitleBar.svg)
256264

257-
* Shape 框架:[ShapeView](https://github.com/getActivity/ShapeView) ![](https://img.shields.io/github/stars/getActivity/ShapeView.svg) ![](https://img.shields.io/github/forks/getActivity/ShapeView.svg)
265+
* ShapeView 框架:[ShapeView](https://github.com/getActivity/ShapeView) ![](https://img.shields.io/github/stars/getActivity/ShapeView.svg) ![](https://img.shields.io/github/forks/getActivity/ShapeView.svg)
266+
267+
* ShapeDrawable 框架:[ShapeDrawable](https://github.com/getActivity/ShapeDrawable) ![](https://img.shields.io/github/stars/getActivity/ShapeDrawable.svg) ![](https://img.shields.io/github/forks/getActivity/ShapeDrawable.svg)
258268

259269
* 语种切换框架:[MultiLanguages](https://github.com/getActivity/MultiLanguages) ![](https://img.shields.io/github/stars/getActivity/MultiLanguages.svg) ![](https://img.shields.io/github/forks/getActivity/MultiLanguages.svg)
260270

261271
* Gson 解析容错:[GsonFactory](https://github.com/getActivity/GsonFactory) ![](https://img.shields.io/github/stars/getActivity/GsonFactory.svg) ![](https://img.shields.io/github/forks/getActivity/GsonFactory.svg)
262272

263273
* 日志查看框架:[Logcat](https://github.com/getActivity/Logcat) ![](https://img.shields.io/github/stars/getActivity/Logcat.svg) ![](https://img.shields.io/github/forks/getActivity/Logcat.svg)
264274

275+
* 嵌套滚动布局框架:[NestedScrollLayout](https://github.com/getActivity/NestedScrollLayout) ![](https://img.shields.io/github/stars/getActivity/NestedScrollLayout.svg) ![](https://img.shields.io/github/forks/getActivity/NestedScrollLayout.svg)
276+
265277
* Android 版本适配:[AndroidVersionAdapter](https://github.com/getActivity/AndroidVersionAdapter) ![](https://img.shields.io/github/stars/getActivity/AndroidVersionAdapter.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidVersionAdapter.svg)
266278

267279
* Android 代码规范:[AndroidCodeStandard](https://github.com/getActivity/AndroidCodeStandard) ![](https://img.shields.io/github/stars/getActivity/AndroidCodeStandard.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidCodeStandard.svg)

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.hjq.window.demo"
88
minSdkVersion 16
99
targetSdkVersion 33
10-
versionCode 1002
11-
versionName "10.2"
10+
versionCode 1003
11+
versionName "10.3"
1212
}
1313

1414
// 支持 Java JDK 8

app/src/main/java/com/hjq/window/demo/IOSToast.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public final class IOSToast {
1515
private static final int TIME = 3000;
1616

1717
public static void showSucceed(Activity activity, CharSequence text) {
18-
new EasyWindow<>(activity)
18+
EasyWindow.with(activity)
1919
.setDuration(TIME)
2020
.setContentView(R.layout.window_hint)
2121
.setAnimStyle(android.R.style.Animation_Translucent)
@@ -25,7 +25,7 @@ public static void showSucceed(Activity activity, CharSequence text) {
2525
}
2626

2727
public static void showFail(Activity activity, CharSequence text) {
28-
new EasyWindow<>(activity)
28+
EasyWindow.with(activity)
2929
.setDuration(TIME)
3030
.setContentView(R.layout.window_hint)
3131
.setAnimStyle(android.R.style.Animation_Activity)
@@ -35,7 +35,7 @@ public static void showFail(Activity activity, CharSequence text) {
3535
}
3636

3737
public static void showWarn(Activity activity, CharSequence text) {
38-
new EasyWindow<>(activity)
38+
EasyWindow.with(activity)
3939
.setDuration(TIME)
4040
.setContentView(R.layout.window_hint)
4141
.setAnimStyle(android.R.style.Animation_Dialog)

app/src/main/java/com/hjq/window/demo/MainActivity.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,18 @@ public void onTitleClick(TitleBar titleBar) {
6262
});
6363
}
6464

65+
@Override
66+
public void onBackPressed() {
67+
// 在某些手机上面无法通过返回键销毁当前 Activity 对象,从而无法触发 LeakCanary 回收对象
68+
finish();
69+
}
70+
6571
@Override
6672
public void onClick(View v) {
6773
int viewId = v.getId();
6874
if (viewId == R.id.btn_main_anim) {
6975

70-
new EasyWindow<>(this)
76+
EasyWindow.with(this)
7177
.setDuration(1000)
7278
.setContentView(R.layout.window_hint)
7379
.setAnimStyle(R.style.TopAnimStyle)
@@ -77,7 +83,7 @@ public void onClick(View v) {
7783

7884
} else if (viewId == R.id.btn_main_duration) {
7985

80-
new EasyWindow<>(this)
86+
EasyWindow.with(this)
8187
.setDuration(1000)
8288
.setContentView(R.layout.window_hint)
8389
.setAnimStyle(R.style.IOSAnimStyle)
@@ -87,7 +93,7 @@ public void onClick(View v) {
8793

8894
} else if (viewId == R.id.btn_main_overlay) {
8995

90-
new EasyWindow<>(this)
96+
EasyWindow.with(this)
9197
.setContentView(R.layout.window_hint)
9298
.setAnimStyle(R.style.IOSAnimStyle)
9399
.setImageDrawable(android.R.id.icon, R.drawable.ic_dialog_tip_finish)
@@ -107,7 +113,7 @@ public void onClick(EasyWindow<?> window, TextView view) {
107113

108114
} else if (viewId == R.id.btn_main_lifecycle) {
109115

110-
new EasyWindow<>(this)
116+
EasyWindow.with(this)
111117
.setDuration(3000)
112118
.setContentView(R.layout.window_hint)
113119
.setAnimStyle(R.style.IOSAnimStyle)
@@ -129,7 +135,7 @@ public void onWindowCancel(EasyWindow<?> window) {
129135

130136
} else if (viewId == R.id.btn_main_click) {
131137

132-
new EasyWindow<>(this)
138+
EasyWindow.with(this)
133139
.setContentView(R.layout.window_hint)
134140
.setAnimStyle(R.style.IOSAnimStyle)
135141
.setImageDrawable(android.R.id.icon, R.drawable.ic_dialog_tip_finish)
@@ -151,7 +157,7 @@ public void run() {
151157

152158
} else if (viewId == R.id.btn_main_view) {
153159

154-
new EasyWindow<>(this)
160+
EasyWindow.with(this)
155161
.setContentView(R.layout.window_hint)
156162
.setAnimStyle(R.style.RightAnimStyle)
157163
.setImageDrawable(android.R.id.icon, R.drawable.ic_dialog_tip_finish)
@@ -168,7 +174,7 @@ public void onClick(final EasyWindow<?> window, TextView view) {
168174

169175
} else if (viewId == R.id.btn_main_input) {
170176

171-
new EasyWindow<>(this)
177+
EasyWindow.with(this)
172178
.setContentView(R.layout.window_input)
173179
.setAnimStyle(R.style.BottomAnimStyle)
174180
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
@@ -183,7 +189,7 @@ public void onClick(final EasyWindow<?> window, TextView view) {
183189

184190
} else if (viewId == R.id.btn_main_draggable) {
185191

186-
new EasyWindow<>(this)
192+
EasyWindow.with(this)
187193
.setContentView(R.layout.window_hint)
188194
.setAnimStyle(R.style.IOSAnimStyle)
189195
.setImageDrawable(android.R.id.icon, R.drawable.ic_dialog_tip_finish)
@@ -212,7 +218,7 @@ public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
212218

213219
@Override
214220
public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
215-
new EasyWindow<>(MainActivity.this)
221+
EasyWindow.with(MainActivity.this)
216222
.setDuration(1000)
217223
.setContentView(R.layout.window_hint)
218224
.setImageDrawable(android.R.id.icon, R.drawable.ic_dialog_tip_error)
@@ -230,7 +236,7 @@ public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
230236

231237
} else if (viewId == R.id.btn_main_utils) {
232238

233-
new EasyWindow<>(this)
239+
EasyWindow.with(this)
234240
.setDuration(1000)
235241
// 将 Toaster 中的 View 转移给 EasyWindow 来显示
236242
.setContentView(Toaster.getStyle().createView(this))
@@ -247,7 +253,7 @@ public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
247253
*/
248254
public static void showGlobalWindow(Application application) {
249255
// 传入 Application 表示这个是一个全局的 Toast
250-
new EasyWindow<>(application)
256+
EasyWindow.with(application)
251257
.setContentView(R.layout.window_phone)
252258
.setGravity(Gravity.END | Gravity.BOTTOM)
253259
.setYOffset(200)

library/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ android {
55

66
defaultConfig {
77
minSdkVersion 14
8-
versionCode 1002
9-
versionName "10.2"
8+
versionCode 1003
9+
versionName "10.3"
1010
}
1111

1212
// 支持 JDK 1.8

library/src/main/java/com/hjq/window/EasyWindow.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@ public class EasyWindow<X extends EasyWindow<?>> implements Runnable,
4848

4949
private static final List<EasyWindow<?>> sWindowInstanceSet = new ArrayList<>();
5050

51+
/**
52+
* 基于 Activity 创建一个 EasyWindow 实例
53+
*/
54+
@SuppressWarnings("rawtypes")
55+
public static EasyWindow with(Activity activity) {
56+
return new EasyWindow(activity);
57+
}
58+
59+
/**
60+
* 基于全局创建一个 EasyWindow 实例,需要悬浮窗权限
61+
*/
62+
@SuppressWarnings("rawtypes")
63+
public static EasyWindow with(Application application) {
64+
return new EasyWindow(application);
65+
}
66+
5167
/**
5268
* 取消所有正在显示的悬浮窗
5369
*/

0 commit comments

Comments
 (0)