瀏覽代碼

0.0.46.beta6
- FullScreenDialog 增加了非 VIEW 实现时,不支持使用 fragment 作为子布局的错误提示(Logcat),其原因为 Window 中不存在 FragmentManager,无法对子布局中的 fragment 进行管理;
- 对 DialogFragment 实现模式下的沉浸式问题进行了处理;
- WaitDialog/TipDialog 的 TYPE.NONE 标记为废弃,不建议使用此方法,此类型等同于直接使用 WaitDialog,因此请勿使用 TipDialog 并指定使用 TYPE.NONE,如有需要,请直接使用: WaitDialog.show(...);

kongzue 3 年之前
父節點
當前提交
b62b972707

+ 6 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -60,6 +60,12 @@ public class WaitDialog extends BaseDialog {
     protected float backgroundRadius = -1;
     
     public enum TYPE {
+        /**
+         * @deprecated 不建议使用,禁止使用此方法。
+         * 此类型等同于直接使用 WaitDialog,因此请勿使用 TipDialog 并指定使用 TYPE.NONE,
+         * 如有需要,请直接使用: WaitDialog.show(...)
+         */
+        @Deprecated
         NONE,
         SUCCESS,
         WARNING,

+ 8 - 4
DialogX/src/main/java/com/kongzue/dialogx/impl/DialogFragmentImpl.java

@@ -6,6 +6,7 @@ import android.graphics.PixelFormat;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Build;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
@@ -21,6 +22,7 @@ import androidx.fragment.app.FragmentTransaction;
 
 import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.interfaces.BaseDialog;
+import com.kongzue.dialogx.interfaces.NoTouchInterface;
 
 import java.lang.ref.WeakReference;
 
@@ -76,10 +78,12 @@ public class DialogFragmentImpl extends DialogFragment {
         dialogView.setOnTouchListener(new View.OnTouchListener() {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
-                for (BaseDialog baseDialog : BaseDialog.getRunningDialogList()) {
-                    if (baseDialog.getOwnActivity() == activity) {
-                        if (!(baseDialog instanceof PopTip)) {
-                            return false;
+                for (BaseDialog dialog : BaseDialog.getRunningDialogList()) {
+                    if (dialog.getOwnActivity() == activity && dialog != baseDialog) {
+                        if (!(dialog instanceof NoTouchInterface)) {
+                            Log.e(">>>", "onTouch: "+dialog );
+                            dialog.getDialogView().dispatchTouchEvent(event);
+                            return true;
                         }
                     }
                 }

+ 25 - 18
DialogX/src/main/java/com/kongzue/dialogx/interfaces/OnBindView.java

@@ -154,25 +154,32 @@ public abstract class OnBindView<D> {
         }
         parentView.addView(getCustomView(), lp);
         onBind((D) dialog, getCustomView());
-        if (fragment != null || supportFragment != null) getCustomView().post(new Runnable() {
-            @Override
-            public void run() {
-                if (fragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getTopActivity() instanceof AppCompatActivity) {
-                    AppCompatActivity appCompatActivity = (AppCompatActivity) BaseDialog.getTopActivity();
-                    androidx.fragment.app.FragmentTransaction transaction = appCompatActivity.getSupportFragmentManager().beginTransaction();
-                    transaction.add(R.id.id_frame_layout_custom, fragment);
-                    transaction.commit();
-                    onFragmentBind((D) dialog, getCustomView(), fragment, appCompatActivity.getSupportFragmentManager());
-                }
-                if (supportFragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getTopActivity() instanceof Activity) {
-                    Activity activity = (Activity) BaseDialog.getTopActivity();
-                    android.app.FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
-                    transaction.add(R.id.id_frame_layout_custom, supportFragment);
-                    transaction.commit();
-                    onFragmentBind((D) dialog, getCustomView(), supportFragment, activity.getFragmentManager());
-                }
+        if (fragment != null || supportFragment != null){
+            if (dialog.getDialogImplMode()!= DialogX.IMPL_MODE.VIEW){
+                BaseDialog.error(dialog.dialogKey() + "非 VIEW 实现模式不支持 fragment 作为子布局显示。\n" +
+                        "其原因为 Window 中不存在 FragmentManager,无法对子布局中的 fragment 进行管理。");
+                return;
             }
-        });
+            getCustomView().post(new Runnable() {
+                @Override
+                public void run() {
+                    if (fragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getTopActivity() instanceof AppCompatActivity) {
+                        AppCompatActivity appCompatActivity = (AppCompatActivity) BaseDialog.getTopActivity();
+                        androidx.fragment.app.FragmentTransaction transaction = appCompatActivity.getSupportFragmentManager().beginTransaction();
+                        transaction.add(R.id.id_frame_layout_custom, fragment);
+                        transaction.commit();
+                        onFragmentBind((D) dialog, getCustomView(), fragment, appCompatActivity.getSupportFragmentManager());
+                    }
+                    if (supportFragment != null && getCustomView() instanceof FrameLayout && BaseDialog.getTopActivity() instanceof Activity) {
+                        Activity activity = (Activity) BaseDialog.getTopActivity();
+                        android.app.FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
+                        transaction.add(R.id.id_frame_layout_custom, supportFragment);
+                        transaction.commit();
+                        onFragmentBind((D) dialog, getCustomView(), supportFragment, activity.getFragmentManager());
+                    }
+                }
+            });
+        }
     }
     
     private Runnable waitBindRunnable;

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

@@ -17,6 +17,7 @@ import android.widget.Toast;
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.interfaces.BaseDialog;
+import com.kongzue.dialogx.interfaces.NoTouchInterface;
 
 import static android.view.WindowManager.LayoutParams.*;
 
@@ -85,7 +86,7 @@ public class WindowUtil {
                 public boolean onTouch(View v, MotionEvent event) {
                     for (int i = BaseDialog.getRunningDialogList().size() - 1; i >= 0; i--) {
                         BaseDialog baseDialog = BaseDialog.getRunningDialogList().get(i);
-                        if (!(baseDialog instanceof PopTip) && baseDialog.getOwnActivity() == activity) {
+                        if (!(baseDialog instanceof NoTouchInterface) && baseDialog.getOwnActivity() == activity) {
                             if (baseDialog.getDialogView() == null) {
                                 return false;
                             }

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

@@ -12,6 +12,7 @@ import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
+import android.widget.ImageView;
 
 import androidx.appcompat.widget.AppCompatImageView;
 
@@ -28,7 +29,7 @@ import java.lang.ref.WeakReference;
  * @mail: myzcxhh@live.cn
  * @createTime: 2019/11/17 23:53
  */
-public class ActivityScreenShotImageView extends AppCompatImageView {
+public class ActivityScreenShotImageView extends ImageView {
     
     float width, height, mRadius;
     

+ 5 - 2
DialogX/src/main/java/com/kongzue/dialogx/util/views/DialogXBaseRelativeLayout.java

@@ -8,6 +8,7 @@ import android.graphics.Rect;
 import android.os.Build;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
@@ -89,16 +90,18 @@ public class DialogXBaseRelativeLayout extends RelativeLayout {
     
     @Override
     protected boolean fitSystemWindows(Rect insets) {
-        if (DialogX.useActivityLayoutTranslationNavigationBar)
+        if (DialogX.useActivityLayoutTranslationNavigationBar || parentDialog.getDialogImplMode() != DialogX.IMPL_MODE.VIEW) {
             paddingView(insets.left, insets.top, insets.right, insets.bottom);
+        }
         return super.fitSystemWindows(insets);
     }
     
     @Override
     public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            if (DialogX.useActivityLayoutTranslationNavigationBar)
+            if (DialogX.useActivityLayoutTranslationNavigationBar || parentDialog.getDialogImplMode() != DialogX.IMPL_MODE.VIEW) {
                 paddingView(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom());
+            }
         }
         return super.dispatchApplyWindowInsets(insets);
     }

+ 1 - 1
app/src/main/res/values/styles.xml

@@ -7,7 +7,7 @@
         <item name="colorAccent">@color/colorAccent</item>
     </style>
 
-    <style name="AppCompatTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
+    <style name="AppCompatTheme" parent="Theme.MaterialComponents.DayNight">
         <!-- Customize your theme here. -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

+ 1 - 1
gradle.properties

@@ -19,5 +19,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.46.beta5
+BUILD_VERSION=0.0.46.beta6
 BUILD_VERSION_INT=45