Browse Source

0.0.50.beta20 pre
- BottomDialog 提供了对外暴露的 boxBody(对话框内容布局外层)实例;
- WindowUtil 提供了额外自定义WindowManager.LayoutParams的接口:

```java
WindowUtil.windowSettings = new WindowUtil.WindowSettings() {
@Override
public WindowManager.LayoutParams overrideWindowLayoutParamsInterface(Context context, View dialogView, WindowManager.LayoutParams originWindowLayoutParams) {
//处理 originWindowLayoutParams...
return originWindowLayoutParams;
}
};
```

- 修复Window模式下,多层Dialog触摸事件逐级向下层传递的问题;

Kongzue 10 months ago
parent
commit
2f658f4a1a

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

@@ -17,6 +17,7 @@ import android.text.TextUtils;
 import android.util.Log;
 import android.view.HapticFeedbackConstants;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowInsets;
@@ -1105,4 +1106,15 @@ public abstract class BaseDialog implements LifecycleOwner {
                 || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && activity.isDestroyed())
                 || (activity instanceof LifecycleOwner && ((LifecycleOwner) activity).getLifecycle().getCurrentState() == Lifecycle.State.DESTROYED);
     }
+
+    public boolean dispatchTouchEvent(MotionEvent event) {
+        if (getDialogView()==null){
+            if (ownActivity!=null && ownActivity.get()!=null){
+             return    ownActivity.get().dispatchTouchEvent(event);
+            }else{
+                return false;
+            }
+        }
+        return getDialogView().dispatchTouchEvent(event);
+    }
 }

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

@@ -31,9 +31,15 @@ import static android.view.WindowManager.LayoutParams.*;
 public class WindowUtil {
 
     public abstract static class WindowSettings {
+
+        //自定义window参数
         public abstract WindowManager.LayoutParams overrideWindowLayoutParamsInterface(Context context, View dialogView, WindowManager.LayoutParams originWindowLayoutParams);
+
+        //自定义根布局
+        public abstract ViewGroup overrideRootView(Context context);
     }
 
+    //自定义window设置
     public static WindowSettings windowSettings;
 
     public static void show(Activity activity, View dialogView, boolean touchEnable) {
@@ -63,7 +69,11 @@ public class WindowUtil {
             activity.startActivity(intent);
             return;
         }
-        FrameLayout rootLayout = new FrameLayout(activity);
+        ViewGroup customRootView = null;
+        if (windowSettings != null) {
+            customRootView = windowSettings.overrideRootView(activity);
+        }
+        ViewGroup rootLayout = customRootView == null ? new FrameLayout(activity) : customRootView;
         if (dialogView.getParent() != null) {
             ((ViewGroup) dialogView.getParent()).removeView(dialogView);
         }
@@ -97,7 +107,7 @@ public class WindowUtil {
                             if (baseDialog.getDialogView() == null) {
                                 return false;
                             }
-                            return baseDialog.getOwnActivity().dispatchTouchEvent(event);
+                            return baseDialog.dispatchTouchEvent(event);
                         }
                     }
                     return activity.dispatchTouchEvent(event);

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

@@ -13,6 +13,7 @@ import android.graphics.Color;
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Build;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.provider.Settings;
@@ -36,6 +37,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatDelegate;
 import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -1562,4 +1564,10 @@ public class MainActivity extends BaseActivity {
         super.onDestroy();
         log("MainActivity#onDestroy");
     }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
+        super.onCreate(savedInstanceState);
+    }
 }