Skip to content

Commit cf5a247

Browse files
committed
新增 setWindowLocation 方法来代替 setGravity、setXOffset、setYOffset 方法
1 parent c514e66 commit cf5a247

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

README.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,9 @@ easyWindow.setWidth(int width);
267267
// 设置悬浮窗高度
268268
easyWindow.setHeight(int height);
269269

270-
// 设置悬浮窗显示的重心
271-
easyWindow.setGravity(int gravity);
272-
// 设置水平偏移量
273-
easyWindow.setXOffset(int px);
274-
// 设置垂直偏移量
275-
easyWindow.setYOffset(int px);
270+
// 设置悬浮窗的位置
271+
easyWindow.setWindowLocation(@Px int x, @Px int y);
272+
easyWindow.setWindowLocation(@GravityFlag int gravity, @Px int x, @Px int y);
276273

277274
// 设置悬浮窗外层是否可触摸
278275
easyWindow.setOutsideTouchable(boolean touchable);

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -371,13 +371,12 @@ public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
371371
} else if (viewId == R.id.btn_main_utils) {
372372

373373
EasyWindow.with(this)
374-
.setWindowDuration(1000)
375374
// 将 Toaster 中的 View 转移给 EasyWindow 来显示
376375
.setContentView(Toaster.getStyle().createView(this))
376+
.setWindowLocation(Gravity.BOTTOM, 0, 100)
377+
.setWindowDuration(1000)
377378
.setAnimStyle(R.style.ScaleAnimStyle)
378379
.setTextByTextView(android.R.id.message, "就问你溜不溜")
379-
.setGravity(Gravity.BOTTOM)
380-
.setYOffset(100)
381380
.show();
382381
}
383382
}
@@ -422,8 +421,7 @@ public void onWindowDraggingStop(@NonNull EasyWindow<?> easyWindow) {
422421
// 传入 Application 表示这个是一个全局的 Toast
423422
EasyWindow.with(application)
424423
.setContentView(R.layout.window_phone)
425-
.setGravity(Gravity.END | Gravity.BOTTOM)
426-
.setYOffset(200)
424+
.setWindowLocation(Gravity.END | Gravity.BOTTOM, 0, 200)
427425
// 设置指定的拖拽规则
428426
.setWindowDraggableRule(springBackWindowDraggableRule)
429427
.setOnClickListenerByView(android.R.id.icon, new OnWindowViewClickListener<ImageView>() {

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ protected void initWindow(@NonNull Context context) {
4444

4545
setContentView(R.layout.window_semi_stealth);
4646

47-
setGravity(Gravity.START | Gravity.TOP);
48-
setXOffset(0);
49-
setYOffset(200);
47+
setWindowLocation(0, 200);
5048

5149
SpringBackWindowDraggableRule springBackWindowDraggableRule = new SpringBackWindowDraggableRule(
5250
SpringBackWindowDraggableRule.ORIENTATION_HORIZONTAL);

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,8 +553,37 @@ public X setHeight(int height) {
553553
return (X) this;
554554
}
555555

556+
/**
557+
* 设置窗口位置
558+
*
559+
* @param gravity 窗口重心
560+
* @param x x 坐标
561+
* @param y y 坐标
562+
*/
563+
public X setWindowLocation(@GravityFlag int gravity, @Px int x, @Px int y) {
564+
mWindowParams.gravity = gravity;
565+
mWindowParams.x = x;
566+
mWindowParams.y = y;
567+
postUpdate();
568+
post(() -> {
569+
if (mWindowDraggableRule != null) {
570+
mWindowDraggableRule.refreshLocationCoordinate();
571+
}
572+
});
573+
return (X) this;
574+
}
575+
576+
public X setWindowLocation(@Px int x, @Px int y) {
577+
// 默认设置屏幕的重心为左上角,需要注意的一个点是,这里不能设置成 Gravity.START | Gravity.TOP,
578+
// 在 Android 中,无论是否设置布局方向(如 RTL 右到左布局 ),屏幕坐标系的原点始终是屏幕左上角,
579+
// 布局方向的调整主要影响的是视图的排列顺序、绘制顺序等逻辑,不会改变基础坐标系的原点位置。
580+
return setWindowLocation(Gravity.LEFT | Gravity.TOP, x, y);
581+
}
582+
556583
/**
557584
* 设置悬浮窗显示的重心
585+
*
586+
* @deprecated 该 API 已经过时,随时会被删除,请尽早迁移到 {@link #setWindowLocation(int, int, int)}
558587
*/
559588
public X setGravity(@GravityFlag int gravity) {
560589
mWindowParams.gravity = gravity;
@@ -569,6 +598,8 @@ public X setGravity(@GravityFlag int gravity) {
569598

570599
/**
571600
* 设置水平偏移量
601+
*
602+
* @deprecated 该 API 已经过时,随时会被删除,请尽早迁移到 {@link #setWindowLocation(int, int)}
572603
*/
573604
public X setXOffset(@Px int px) {
574605
mWindowParams.x = px;
@@ -583,6 +614,8 @@ public X setXOffset(@Px int px) {
583614

584615
/**
585616
* 设置垂直偏移量
617+
*
618+
* @deprecated 该 API 已经过时,随时会被删除,请尽早迁移到 {@link #setWindowLocation(int, int)}
586619
*/
587620
public X setYOffset(@Px int px) {
588621
mWindowParams.y = px;

0 commit comments

Comments
 (0)