Przeglądaj źródła

0.0.49.beta6 ready
- 对 BottomMenu 的 setOkButton、setCancelButton、setOtherButton 提供了单独的 OnBottomMenuButtonClickListener 参数接口,可直接提供 BottomMenu 参数的 onClick 回调事件;

0.0.49.beta5 ready
- ActivityScreenShotImageView 增加静态方法 useHardwareRenderingMode,开启可使用硬件加速渲染模式;
- 修复部分系统下 ActivityScreenShotImageView 在执行回收时触发的“Software rendering doesn't support hardware bitmaps.”异常;
- 其他问题修复;

0.0.49.beta4 ready
- 修复部分系统下 BlurRelativeLayout 或 BlurRelativeLayout 在执行回收时触发的“Calling RS with no Context active.”异常;
- ActivityScreenShotImageView 截图方案更新;

0.0.49.beta4 ready
- 修复在部分设备上由 DialogXBaseRelativeLayout 引发的 StackOverflowError,此问题猜测跟特定版本系统固件存在问题有关;

0.0.49.beta3
- 修复 ActivityScreenShotImageView 可能引发的“Software rendering doesn’t support hardware bitmaps” 异常;
- 修复 BottomDialog/FullScreenDialog 的滑动事件在内部存在 ScrollController 时,若触摸位置处于 ScrollController 布局外无法滑动对话框的问题;

0.0.49.beta2
- InputInfo新增方法:`getInputFilters()`、`setInputFilters(InputFilter[] inputFilters)`、`addInputFilter(InputFilter inputFilter)` 和 `removeInputFilter(InputFilter inputFilter)`(issues:332);
- 尝试性修复 DialogFragment 模式实现下的 WaitDialog 内存泄漏问题(issues:334);
- 修复关于DialogFragmentImpl引发的空指针问题此问题(issues:335);

0.0.49.beta1
- 修复 BlurRelativeLayout 和 BlurLinearLayout 在 iOS 主题下使用 DialogFragment 模式时存在的渲染宽度和高度 <=0 导致的异常(issues:324);
- 修复 IOS 主题下可能存在的 `RSInvalidStateException: Calling RS with no Context active` 异常问题(issues:327);
- 修复可能存在的高频启关对话框过程中,因UI未完成构建被关闭引发的空指针异常(issues:331);

Kongzue 2 lat temu
rodzic
commit
79f43297f4

+ 30 - 10
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomDialog.java

@@ -28,6 +28,7 @@ import androidx.lifecycle.Lifecycle;
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.BaseDialog;
+import com.kongzue.dialogx.interfaces.BaseOnDialogClickCallback;
 import com.kongzue.dialogx.interfaces.BlurViewType;
 import com.kongzue.dialogx.interfaces.BottomDialogSlideEventLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
@@ -38,6 +39,7 @@ import com.kongzue.dialogx.interfaces.DialogXStyle;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
+import com.kongzue.dialogx.interfaces.OnBottomMenuButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.ScrollController;
 import com.kongzue.dialogx.util.BottomDialogTouchEventInterceptor;
@@ -70,9 +72,9 @@ public class BottomDialog extends BaseDialog implements DialogXBaseBottomDialog
     protected boolean allowInterceptTouch = true;
     protected boolean bottomNonSafetyAreaBySelf = false;
     protected int maskColor = -1;
-    protected OnDialogButtonClickListener<BottomDialog> cancelButtonClickListener;
-    protected OnDialogButtonClickListener<BottomDialog> okButtonClickListener;
-    protected OnDialogButtonClickListener<BottomDialog> otherButtonClickListener;
+    protected BaseOnDialogClickCallback cancelButtonClickListener;
+    protected BaseOnDialogClickCallback okButtonClickListener;
+    protected BaseOnDialogClickCallback otherButtonClickListener;
     protected OnBackgroundMaskClickListener<BottomDialog> onBackgroundMaskClickListener;
     protected OnBackPressedListener<BottomDialog> onBackPressedListener;
     protected BOOLEAN privateCancelable;
@@ -376,8 +378,14 @@ public class BottomDialog extends BaseDialog implements DialogXBaseBottomDialog
                     public void onClick(View v) {
                         buttonSelectResult = BUTTON_SELECT_RESULT.BUTTON_CANCEL;
                         if (cancelButtonClickListener != null) {
-                            if (!cancelButtonClickListener.onClick(me, v)) {
-                                dismiss();
+                            if (cancelButtonClickListener instanceof OnDialogButtonClickListener) {
+                                if (!((OnDialogButtonClickListener) cancelButtonClickListener).onClick(me, v)) {
+                                    dismiss();
+                                }
+                            } else if (cancelButtonClickListener instanceof OnBottomMenuButtonClickListener) {
+                                if (!((OnBottomMenuButtonClickListener) cancelButtonClickListener).onClick(me, v)) {
+                                    dismiss();
+                                }
                             }
                         } else {
                             dismiss();
@@ -391,8 +399,14 @@ public class BottomDialog extends BaseDialog implements DialogXBaseBottomDialog
                     public void onClick(View v) {
                         buttonSelectResult = BUTTON_SELECT_RESULT.BUTTON_OTHER;
                         if (otherButtonClickListener != null) {
-                            if (!otherButtonClickListener.onClick(me, v)) {
-                                dismiss();
+                            if (otherButtonClickListener instanceof OnDialogButtonClickListener) {
+                                if (!((OnDialogButtonClickListener) otherButtonClickListener).onClick(me, v)) {
+                                    dismiss();
+                                }
+                            } else if (otherButtonClickListener instanceof OnBottomMenuButtonClickListener) {
+                                if (!((OnBottomMenuButtonClickListener) otherButtonClickListener).onClick(me, v)) {
+                                    dismiss();
+                                }
                             }
                         } else {
                             dismiss();
@@ -406,8 +420,14 @@ public class BottomDialog extends BaseDialog implements DialogXBaseBottomDialog
                     public void onClick(View v) {
                         buttonSelectResult = BUTTON_SELECT_RESULT.BUTTON_OK;
                         if (okButtonClickListener != null) {
-                            if (!okButtonClickListener.onClick(me, v)) {
-                                dismiss();
+                            if (okButtonClickListener instanceof OnDialogButtonClickListener) {
+                                if (!((OnDialogButtonClickListener) okButtonClickListener).onClick(me, v)) {
+                                    dismiss();
+                                }
+                            } else if (okButtonClickListener instanceof OnBottomMenuButtonClickListener) {
+                                if (!((OnBottomMenuButtonClickListener) okButtonClickListener).onClick(me, v)) {
+                                    dismiss();
+                                }
                             }
                         } else {
                             dismiss();
@@ -917,7 +937,7 @@ public class BottomDialog extends BaseDialog implements DialogXBaseBottomDialog
     }
 
     public OnDialogButtonClickListener<BottomDialog> getCancelButtonClickListener() {
-        return cancelButtonClickListener;
+        return (OnDialogButtonClickListener<BottomDialog>) cancelButtonClickListener;
     }
 
     public BottomDialog setCancelButtonClickListener(OnDialogButtonClickListener<BottomDialog> cancelButtonClickListener) {

+ 113 - 22
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java

@@ -24,6 +24,7 @@ import com.kongzue.dialogx.interfaces.MenuItemTextInfoInterceptor;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
+import com.kongzue.dialogx.interfaces.OnBottomMenuButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnIconChangeCallBack;
 import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
@@ -808,19 +809,50 @@ public class BottomMenu extends BottomDialog {
         return this;
     }
 
-    public BottomMenu setCancelButton(OnDialogButtonClickListener cancelButtonClickListener) {
+    public BottomMenu setCancelButton(OnBottomMenuButtonClickListener<BottomMenu> cancelButtonClickListener) {
         this.cancelButtonClickListener = cancelButtonClickListener;
         return this;
     }
 
-    public BottomMenu setCancelButton(CharSequence cancelText, OnDialogButtonClickListener cancelButtonClickListener) {
+    public BottomMenu setCancelButton(CharSequence cancelText, OnBottomMenuButtonClickListener<BottomMenu> cancelButtonClickListener) {
         this.cancelText = cancelText;
         this.cancelButtonClickListener = cancelButtonClickListener;
         preRefreshUI();
         return this;
     }
 
-    public BottomMenu setCancelButton(int cancelTextResId, OnDialogButtonClickListener cancelButtonClickListener) {
+    public BottomMenu setCancelButton(int cancelTextResId, OnBottomMenuButtonClickListener<BottomMenu> cancelButtonClickListener) {
+        this.cancelText = getString(cancelTextResId);
+        this.cancelButtonClickListener = cancelButtonClickListener;
+        preRefreshUI();
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setCancelButton(OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setCancelButton(OnDialogButtonClickListener<BottomDialog> cancelButtonClickListener) {
+        this.cancelButtonClickListener = cancelButtonClickListener;
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setCancelButton(CharSequence cancelText, OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setCancelButton(CharSequence cancelText, OnDialogButtonClickListener<BottomDialog> cancelButtonClickListener) {
+        this.cancelText = cancelText;
+        this.cancelButtonClickListener = cancelButtonClickListener;
+        preRefreshUI();
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setCancelButton(int cancelTextResId, OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setCancelButton(int cancelTextResId, OnDialogButtonClickListener<BottomDialog> cancelButtonClickListener) {
         this.cancelText = getString(cancelTextResId);
         this.cancelButtonClickListener = cancelButtonClickListener;
         preRefreshUI();
@@ -881,11 +913,11 @@ public class BottomMenu extends BottomDialog {
         return this;
     }
 
-    public OnDialogButtonClickListener getCancelButtonClickListener() {
-        return cancelButtonClickListener;
+    public OnBottomMenuButtonClickListener<BottomMenu> getBottomMenuCancelButtonClickListener() {
+        return (OnBottomMenuButtonClickListener<BottomMenu>) cancelButtonClickListener;
     }
 
-    public BottomMenu setCancelButtonClickListener(OnDialogButtonClickListener cancelButtonClickListener) {
+    public BottomMenu setCancelButtonClickListener(OnBottomMenuButtonClickListener<BottomMenu> cancelButtonClickListener) {
         this.cancelButtonClickListener = cancelButtonClickListener;
         return this;
     }
@@ -1019,20 +1051,50 @@ public class BottomMenu extends BottomDialog {
         return this;
     }
 
-    public BottomMenu setOkButton(OnDialogButtonClickListener<BottomDialog> OkButtonClickListener) {
-        this.okButtonClickListener = OkButtonClickListener;
+    public BottomMenu setOkButton(OnBottomMenuButtonClickListener<BottomMenu> okButtonClickListener) {
+        this.okButtonClickListener = okButtonClickListener;
         return this;
     }
 
-    public BottomMenu setOkButton(CharSequence OkText, OnDialogButtonClickListener<BottomDialog> OkButtonClickListener) {
-        this.okText = OkText;
-        this.okButtonClickListener = OkButtonClickListener;
+    public BottomMenu setOkButton(CharSequence okText, OnBottomMenuButtonClickListener<BottomMenu> okButtonClickListener) {
+        this.okText = okText;
+        this.okButtonClickListener = okButtonClickListener;
         return this;
     }
 
-    public BottomMenu setOkButton(int OkTextResId, OnDialogButtonClickListener<BottomDialog> OkButtonClickListener) {
-        this.okText = getString(OkTextResId);
-        this.okButtonClickListener = OkButtonClickListener;
+    public BottomMenu setOkButton(int okTextResId, OnBottomMenuButtonClickListener<BottomMenu> okButtonClickListener) {
+        this.okText = getString(okTextResId);
+        this.okButtonClickListener = okButtonClickListener;
+        return this;
+    }
+
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setOkButton(OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setOkButton(OnDialogButtonClickListener<BottomDialog> okButtonClickListener) {
+        this.okButtonClickListener = okButtonClickListener;
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setOkButton(CharSequence okText, OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setOkButton(CharSequence okText, OnDialogButtonClickListener<BottomDialog> okButtonClickListener) {
+        this.okText = okText;
+        this.okButtonClickListener = okButtonClickListener;
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setOkButton(int okTextResId, OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setOkButton(int okTextResId, OnDialogButtonClickListener<BottomDialog> okButtonClickListener) {
+        this.okText = getString(okTextResId);
+        this.okButtonClickListener = okButtonClickListener;
         return this;
     }
 
@@ -1052,20 +1114,49 @@ public class BottomMenu extends BottomDialog {
         return this;
     }
 
-    public BottomMenu setOtherButton(OnDialogButtonClickListener<BottomDialog> OtherButtonClickListener) {
-        this.otherButtonClickListener = OtherButtonClickListener;
+    public BottomMenu setOtherButton(OnBottomMenuButtonClickListener<BottomMenu> otherButtonClickListener) {
+        this.otherButtonClickListener = otherButtonClickListener;
         return this;
     }
 
-    public BottomMenu setOtherButton(CharSequence OtherText, OnDialogButtonClickListener<BottomDialog> OtherButtonClickListener) {
-        this.otherText = OtherText;
-        this.otherButtonClickListener = OtherButtonClickListener;
+    public BottomMenu setOtherButton(CharSequence otherText, OnBottomMenuButtonClickListener<BottomMenu> otherButtonClickListener) {
+        this.otherText = otherText;
+        this.otherButtonClickListener = otherButtonClickListener;
         return this;
     }
 
-    public BottomMenu setOtherButton(int OtherTextResId, OnDialogButtonClickListener<BottomDialog> OtherButtonClickListener) {
-        this.otherText = getString(OtherTextResId);
-        this.otherButtonClickListener = OtherButtonClickListener;
+    public BottomMenu setOtherButton(int otherTextResId, OnBottomMenuButtonClickListener<BottomMenu> otherButtonClickListener) {
+        this.otherText = getString(otherTextResId);
+        this.otherButtonClickListener = otherButtonClickListener;
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setOtherButton(OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setOtherButton(OnDialogButtonClickListener<BottomDialog> otherButtonClickListener) {
+        this.otherButtonClickListener = otherButtonClickListener;
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setOtherButton(CharSequence otherText, OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setOtherButton(CharSequence otherText, OnDialogButtonClickListener<BottomDialog> otherButtonClickListener) {
+        this.otherText = otherText;
+        this.otherButtonClickListener = otherButtonClickListener;
+        return this;
+    }
+
+    /**
+     * 建议使用 {@link com.kongzue.dialogx.dialogs.BottomMenu#setOtherButton(int otherTextResId, OnBottomMenuButtonClickListener<BottomMenu>)}
+     */
+    @Deprecated
+    public BottomMenu setOtherButton(int otherTextResId, OnDialogButtonClickListener<BottomDialog> otherButtonClickListener) {
+        this.otherText = getString(otherTextResId);
+        this.otherButtonClickListener = otherButtonClickListener;
         return this;
     }
 

+ 3 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseOnDialogClickCallback.java

@@ -1,5 +1,7 @@
 package com.kongzue.dialogx.interfaces;
 
+import android.view.View;
+
 /**
  * @author: Kongzue
  * @github: https://github.com/kongzue/
@@ -8,4 +10,5 @@ package com.kongzue.dialogx.interfaces;
  * @createTime: 2020/10/22 15:07
  */
 public interface BaseOnDialogClickCallback {
+
 }

+ 8 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/OnBottomMenuButtonClickListener.java

@@ -0,0 +1,8 @@
+package com.kongzue.dialogx.interfaces;
+
+import android.view.View;
+
+public interface OnBottomMenuButtonClickListener <D extends BaseDialog> extends BaseOnDialogClickCallback{
+
+    boolean onClick(D dialog, View v);
+}

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

@@ -69,6 +69,7 @@ import com.kongzue.dialogx.interfaces.MenuItemTextInfoInterceptor;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
+import com.kongzue.dialogx.interfaces.OnBottomMenuButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnIconChangeCallBack;
 import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
@@ -1214,9 +1215,9 @@ public class MainActivity extends BaseActivity {
                                 selectMenuIndex = index;
                             }
                         })
-                        .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
+                        .setCancelButton("确定",new OnBottomMenuButtonClickListener<BottomMenu>() {
                             @Override
-                            public boolean onClick(BottomDialog baseDialog, View v) {
+                            public boolean onClick(BottomMenu baseDialog, View v) {
                                 PopTip.show("已选择:" + singleSelectMenuText[selectMenuIndex]);
                                 return false;
                             }
@@ -1229,8 +1230,8 @@ public class MainActivity extends BaseActivity {
             @Override
             public void onClick(View v) {
                 BottomMenu.show(multiSelectMenuText)
-                        .setMessage("这里是权限确认的文本说明,这是一个演示菜单")
-                        .setTitle("获得权限标题")
+                        .setMessage("这里是选择城市的模拟范例,这是一个演示菜单")
+                        .setTitle("请选择城市")
                         .setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
                             @Override
                             public void onMultiItemSelect(BottomMenu dialog, CharSequence[] text, int[] index) {
@@ -1241,13 +1242,20 @@ public class MainActivity extends BaseActivity {
                                 selectMenuIndexArray = index;
                             }
                         })
-                        .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
+                        .setOkButton("确定",new OnBottomMenuButtonClickListener<BottomMenu>() {
                             @Override
-                            public boolean onClick(BottomDialog baseDialog, View v) {
+                            public boolean onClick(BottomMenu dialog, View v) {
                                 PopTip.show("已选择:" + multiSelectMenuResultCache);
                                 return false;
                             }
                         })
+//                        .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
+//                            @Override
+//                            public boolean onClick(BottomDialog baseDialog, View v) {
+//                                PopTip.show("已选择:" + multiSelectMenuResultCache);
+//                                return false;
+//                            }
+//                        })
                         .setSelection(selectMenuIndexArray);
             }
         });

+ 1 - 1
gradle.properties

@@ -19,7 +19,7 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.49.beta5
+BUILD_VERSION=0.0.49.beta6
 BUILD_VERSION_INT=48
 DIALOGX_STYLE_VERSION=5
 android.nonTransitiveRClass=true