1
0
kongzue 4 жил өмнө
parent
commit
1e5f5a242e

+ 2 - 8
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java

@@ -528,16 +528,10 @@ public class BottomMenu extends BottomDialog {
                                     if (!onMenuItemSelectListener.onClick(me, menuList.get(position), position)) {
                                         dismiss();
                                     } else {
-                                        boolean select = false;
-                                        if (selectionIndex == position) {
-                                            selectionIndex = -1;
-                                        } else {
-                                            selectionIndex = position;
-                                            select = true;
-                                        }
+                                        selectionIndex = position;
                                         menuListAdapter.notifyDataSetInvalidated();
                                         menuListAdapter.notifyDataSetChanged();
-                                        onMenuItemSelectListener.onOneItemSelect(me, menuList.get(position), position, select);
+                                        onMenuItemSelectListener.onOneItemSelect(me, menuList.get(position), position, true);
                                     }
                                 } else {
                                     if (onMenuItemClickListener != null) {

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

@@ -77,6 +77,11 @@ public class PopTip extends BaseDialog {
         super();
     }
     
+    @Override
+    public boolean isCancelable() {
+        return false;
+    }
+    
     public static PopTip build() {
         return new PopTip();
     }

+ 11 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -215,6 +215,8 @@ public abstract class BaseDialog {
         autoShowInputKeyboard = DialogX.autoShowInputKeyboard;
     }
     
+    public abstract boolean isCancelable();
+    
     public View createView(int layoutId) {
         if (getContext() == null) {
             error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
@@ -361,6 +363,11 @@ public abstract class BaseDialog {
         new Handler(Looper.getMainLooper()).post(runnable);
     }
     
+    public View getDialogView() {
+        if (dialogView == null) return null;
+        return dialogView.get();
+    }
+    
     public Activity getActivity() {
         return ownActivity == null ? null : ownActivity.get();
     }
@@ -381,4 +388,8 @@ public abstract class BaseDialog {
             }
         }
     }
+    
+    public static List<BaseDialog> getRunningDialogList() {
+        return new CopyOnWriteArrayList<>(runningDialogList);
+    }
 }

+ 35 - 2
DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java

@@ -6,12 +6,14 @@ import android.graphics.PixelFormat;
 import android.os.Build;
 import android.util.Log;
 import android.view.Gravity;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.widget.Toast;
 
 import com.kongzue.dialogx.R;
+import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 
 import static android.view.WindowManager.LayoutParams.*;
@@ -26,6 +28,25 @@ import static android.view.WindowManager.LayoutParams.*;
 public class WindowUtil {
     
     public static void show(Activity activity, View dialogView, boolean touchEnable) {
+        try {
+            if (activity.getWindow().getDecorView().isAttachedToWindow()) {
+                showNow(activity, dialogView, touchEnable);
+            } else {
+                activity.getWindow().getDecorView().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        showNow(activity, dialogView, touchEnable);
+                    }
+                });
+            }
+        } catch (Exception e) {
+            if (activity != null && !activity.isDestroyed()) {
+                showNow(activity, dialogView, touchEnable);
+            }
+        }
+    }
+    
+    private static void showNow(Activity activity, View dialogView, boolean touchEnable) {
         WindowManager manager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
         WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
         
@@ -38,12 +59,24 @@ public class WindowUtil {
                 FLAG_LAYOUT_IN_SCREEN
         ;
         if (!touchEnable) {
-            layoutParams.flags = layoutParams.flags | FLAG_NOT_FOCUSABLE;
+            dialogView.setOnTouchListener(new View.OnTouchListener() {
+                @Override
+                public boolean onTouch(View v, MotionEvent event) {
+                    for (BaseDialog baseDialog : BaseDialog.getRunningDialogList()) {
+                        if (!(baseDialog instanceof PopTip) && !baseDialog.isCancelable() && baseDialog.getActivity() == activity) {
+                            if (baseDialog.getDialogView() == null) {
+                                return false;
+                            }
+                            return baseDialog.getDialogView().dispatchTouchEvent(event);
+                        }
+                    }
+                    return activity.dispatchTouchEvent(event);
+                }
+            });
         }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
             layoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
         }
-        
         manager.addView(dialogView, layoutParams);
     }
     

+ 1 - 1
DialogX/src/main/java/com/kongzue/dialogx/util/views/BlurView.java

@@ -445,7 +445,7 @@ public class BlurView extends View {
         return DEBUGMODE && DialogX.DEBUGMODE;
     }
     
-    public static void log(Object o) {
+    private static void log(Object o) {
         if (isDebug()) Log.i(">>>", o.toString());
     }
     

+ 1 - 1
app/src/main/java/com/kongzue/dialogxdemo/App.java

@@ -26,7 +26,7 @@ public class App extends BaseApp<App> {
     @Override
     public void init() {
         DialogX.init(this);
-        DialogX.implIMPLMode= DialogX.IMPL_MODE.VIEW;
+        DialogX.implIMPLMode= DialogX.IMPL_MODE.WINDOW;
         DialogX.useHaptic = false;
         DialogX.globalStyle = new MaterialStyle() {
             @Override

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

@@ -671,7 +671,7 @@ public class MainActivity extends BaseActivity {
                         @Override
                         public boolean onClick(PopTip popTip, View v) {
                             //点击“撤回”按钮回调
-                            toastS("邮件已撤回");
+                            toast("邮件已撤回");
                             return false;
                         }
                     }).showLong();

+ 1 - 1
gradle.properties

@@ -18,5 +18,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.40.beta3
+BUILD_VERSION=0.0.40.beta4
 BUILD_VERSION_INT=39