Przeglądaj źródła

0.0.50.beta36.pre
- 修复 PopTip 和 PopNotification 通过 `.show(activity)` 指定要显示到 activity 无效问题;

Kongzue 1 tydzień temu
rodzic
commit
35dfde2a49

+ 57 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopMenu.java

@@ -4,6 +4,7 @@ import static android.view.View.OVER_SCROLL_NEVER;
 import static android.view.View.VISIBLE;
 
 import android.animation.ValueAnimator;
+import android.app.Activity;
 import android.graphics.Outline;
 import android.graphics.drawable.GradientDrawable;
 import android.os.Build;
@@ -289,6 +290,62 @@ public class PopMenu extends BaseDialog {
         return this;
     }
 
+    public PopMenu show(Activity activity) {
+        if (isHide && getDialogView() != null && isShow) {
+            if (hideWithExitAnim && getDialogImpl() != null) {
+                getDialogImpl().boxBody.clearAnimation();
+                getDialogView().setVisibility(View.VISIBLE);
+                getDialogImpl().boxRoot.animate().alpha(1f);
+                getDialogImpl().getDialogXAnimImpl().doShowAnim(me, getDialogImpl().boxBody);
+            } else {
+                getDialogView().setVisibility(View.VISIBLE);
+            }
+            return this;
+        }
+
+        super.beforeShow();
+        if (getDialogView() == null) {
+            int layoutId = isLightTheme() ? R.layout.layout_dialogx_popmenu_material : R.layout.layout_dialogx_popmenu_material_dark;
+            if (getStyle().popMenuSettings() != null) {
+                if (getStyle().popMenuSettings().layout(isLightTheme()) != 0) {
+                    layoutId = getStyle().popMenuSettings().layout(isLightTheme());
+                }
+            }
+
+            View dialogView = createView(layoutId);
+            dialogImpl = new DialogImpl(dialogView);
+            if (dialogView != null) {
+                dialogView.setTag(me);
+            }
+            show(activity, dialogView);
+        } else {
+            show(activity, getDialogView());
+        }
+        if (baseView() != null) {
+            viewTreeObserver = baseView().getViewTreeObserver();
+            viewTreeObserver.addOnDrawListener(baseViewDrawListener = new ViewTreeObserver.OnDrawListener() {
+                @Override
+                public void onDraw() {
+                    int[] baseViewLocCache = new int[2];
+                    if (baseView() != null) {
+                        baseView().getLocationInWindow(baseViewLocCache);
+                        if (getDialogImpl() != null && !baseViewLoc.isSameLoc(baseViewLocCache) && baseView().getVisibility() == VISIBLE) {
+                            baseViewLoc.set(baseViewLocCache);
+                            refreshMenuLoc();
+                        }
+                    } else {
+                        if (viewTreeObserver != null) {
+                            removeDrawListener(viewTreeObserver, this);
+                            viewTreeObserver = null;
+                            baseViewDrawListener = null;
+                        }
+                    }
+                }
+            });
+        }
+        return this;
+    }
+
     private void refreshMenuLoc() {
         if (getDialogImpl() == null || getDialogImpl().boxRoot == null || baseView() == null) {
             return;

+ 1 - 1
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopNotification.java

@@ -409,7 +409,7 @@ public class PopNotification extends BaseDialog implements NoTouchInterface {
 
     public PopNotification show(Activity activity) {
         super.beforeShow();
-        if (getDialogView() != null) {
+        if (getDialogView() == null) {
             if (DialogX.onlyOnePopNotification) {
                 PopNotification oldInstance = null;
                 if (popNotificationList != null && !popNotificationList.isEmpty()) {

+ 1 - 1
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java

@@ -375,7 +375,7 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
 
     public PopTip show(Activity activity) {
         super.beforeShow();
-        if (getDialogView() != null) {
+        if (getDialogView() == null) {
             if (DialogX.onlyOnePopTip) {
                 PopTip oldInstance = null;
                 if (popTipList != null && !popTipList.isEmpty()) {

+ 2 - 2
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -1264,7 +1264,7 @@ public class MainActivity extends BaseActivity {
             @Override
             public void onClick(View v) {
                 index++;
-                PopTip.show("任务 " + index + " 已完成处理", "撤销").setEnterAnimDuration(500).iconSuccess().noAutoDismiss();
+                PopTip.show("任务 " + index + " 已完成处理", "撤销").setEnterAnimDuration(500).iconSuccess();
             }
         });
 
@@ -1423,7 +1423,7 @@ public class MainActivity extends BaseActivity {
                         toast("点击回复按钮");
                         return false;
                     }
-                }).noAutoDismiss();
+                });
             }
         });