Browse Source

0.0.48.beta18
- 修复 FullScreenDialog 在输入法弹起情况下启动时可能引发的背景、对话框高度和位置异常问题;
- 修复 BaseDialog 可能存在的空指针异常风险;
- 修复部分处于安卓11、10的小米设备且使用 DialogFragment 模式时对话框无法正常显示的问题;
- 修复开启 `ActivityScreenShotImageView.hideContentView` 时 FullScreenDialog 不显示的错误;

Kongzue 2 years ago
parent
commit
9ee764b1cf

+ 20 - 9
DialogX/src/main/java/com/kongzue/dialogx/util/views/ActivityScreenShotImageView.java

@@ -154,29 +154,40 @@ public class ActivityScreenShotImageView extends ImageView {
     private void drawViewImage(View view) {
         if (view.getWidth() == 0 || view.getHeight() == 0) return;
         dialog.getDialogView().setVisibility(GONE);
+        setContentViewVisibility(true);
         view.buildDrawingCache();
         Rect rect = new Rect();
         view.getWindowVisibleDisplayFrame(rect);
         view.setDrawingCacheEnabled(true);
         setImageBitmap(Bitmap.createBitmap(view.getDrawingCache(), 0, 0, view.getWidth(), view.getHeight()));
         view.destroyDrawingCache();
-        if (hideContentView) {
-            if (contentView != null && contentView.get() != null) {
-                contentView.get().setVisibility(VISIBLE);
-            }
-            view.setVisibility(GONE);
-            contentView = new WeakReference<>(view);
-        }
+        setContentViewVisibility(false);
         isScreenshotSuccess = true;
         dialog.getDialogView().setVisibility(VISIBLE);
         dialog.getDialogView().requestFocus();
     }
 
+    protected void setContentViewVisibility(boolean show) {
+        if (hideContentView) {
+            if (show) {
+                if (contentView != null && contentView.get() != null) {
+                    contentView.get().setVisibility(VISIBLE);
+                }
+            } else {
+                View userContentView = Objects.requireNonNull(getDecorView()).getChildAt(0);
+                if (userContentView != null) {
+                    userContentView.setVisibility(GONE);
+                    contentView = new WeakReference<>(userContentView);
+                }
+            }
+        }
+    }
+
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
-        if (contentView != null && contentView.get() != null && hideContentView) {
-            contentView.get().setVisibility(VISIBLE);
+        setContentViewVisibility(true);
+        if (contentView != null) {
             contentView.clear();
         }
     }