Browse Source

add set background color function

kongzue 4 years ago
parent
commit
d6acdd4c03

+ 25 - 3
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomDialog.java

@@ -15,6 +15,8 @@ import android.widget.RelativeLayout;
 import android.widget.ScrollView;
 import android.widget.TextView;
 
+import androidx.annotation.ColorInt;
+
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.impl.AnimatorListenerEndCallBack;
@@ -27,6 +29,7 @@ import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
+import com.kongzue.dialogx.style.MaterialStyle;
 import com.kongzue.dialogx.util.BottomDialogTouchEventInterceptor;
 import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.BlurView;
@@ -149,6 +152,7 @@ public class BottomDialog extends BaseDialog {
         public BlurView blurView;
         public ViewGroup boxCancel;
         public TextView btnCancel;
+        public BlurView cancelBlurView;
         
         public DialogImpl(View convertView) {
             boxRoot = convertView.findViewById(R.id.box_root);
@@ -201,14 +205,14 @@ public class BottomDialog extends BaseDialog {
                         int blurFrontColor = getResources().getColor(style.messageDialogBlurSettings().blurForwardColorRes(isLightTheme()));
                         blurView = new BlurView(bkg.getContext(), null);
                         RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(bkg.getWidth(), bkg.getHeight());
-                        blurView.setOverlayColor(blurFrontColor);
+                        blurView.setOverlayColor(backgroundColor == -1 ? blurFrontColor : backgroundColor);
                         blurView.setTag("blurView");
                         blurView.setRadiusPx(style.messageDialogBlurSettings().blurBackgroundRoundRadiusPx());
                         boxBody.addView(blurView, 0, params);
                         
-                        BlurView cancelBlurView = new BlurView(boxCancel.getContext(), null);
+                        cancelBlurView = new BlurView(boxCancel.getContext(), null);
                         RelativeLayout.LayoutParams cancelButtonLp = new RelativeLayout.LayoutParams(boxCancel.getWidth(), boxCancel.getHeight());
-                        cancelBlurView.setOverlayColor(blurFrontColor);
+                        cancelBlurView.setOverlayColor(backgroundColor == -1 ? blurFrontColor : backgroundColor);
                         cancelBlurView.setTag("blurView");
                         cancelBlurView.setUseBlur(false);
                         cancelBlurView.setRadiusPx(style.messageDialogBlurSettings().blurBackgroundRoundRadiusPx());
@@ -298,6 +302,14 @@ public class BottomDialog extends BaseDialog {
         
         @Override
         public void refreshView() {
+            if (backgroundColor != -1) {
+                tintColor(bkg, backgroundColor);
+                if (blurView != null && cancelBlurView != null) {
+                    blurView.setOverlayColor(backgroundColor);
+                    cancelBlurView.setOverlayColor(backgroundColor);
+                }
+            }
+            
             txtDialogTitle.getPaint().setFakeBoldText(true);
             
             showText(txtDialogTitle, title);
@@ -555,4 +567,14 @@ public class BottomDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public int getBackgroundColor() {
+        return backgroundColor;
+    }
+    
+    public BottomDialog setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+        refreshUI();
+        return this;
+    }
 }

+ 12 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java

@@ -6,6 +6,8 @@ import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.RelativeLayout;
 
+import androidx.annotation.ColorInt;
+
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
@@ -368,4 +370,14 @@ public class BottomMenu extends BottomDialog {
         refreshUI();
         return this;
     }
+    
+    public int getBackgroundColor() {
+        return backgroundColor;
+    }
+    
+    public BottomMenu setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+        refreshUI();
+        return this;
+    }
 }

+ 12 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/InputDialog.java

@@ -2,6 +2,8 @@ package com.kongzue.dialogx.dialogs;
 
 import android.view.View;
 
+import androidx.annotation.ColorInt;
+
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
@@ -340,4 +342,14 @@ public class InputDialog extends MessageDialog {
         refreshUI();
         return this;
     }
+    
+    public int getBackgroundColor() {
+        return backgroundColor;
+    }
+    
+    public InputDialog setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+        refreshUI();
+        return this;
+    }
 }

+ 23 - 1
DialogX/src/main/java/com/kongzue/dialogx/dialogs/MessageDialog.java

@@ -17,6 +17,8 @@ import android.widget.RelativeLayout;
 import android.widget.Space;
 import android.widget.TextView;
 
+import androidx.annotation.ColorInt;
+
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.impl.AnimatorListenerEndCallBack;
@@ -28,6 +30,7 @@ import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
 import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
+import com.kongzue.dialogx.style.MaterialStyle;
 import com.kongzue.dialogx.util.views.BlurView;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 import com.kongzue.dialogx.util.InputInfo;
@@ -193,7 +196,7 @@ public class MessageDialog extends BaseDialog {
                                 blurView = new BlurView(bkg.getContext(), null);
                                 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(bkg.getWidth(), bkg.getHeight());
                                 params.addRule(RelativeLayout.CENTER_IN_PARENT);
-                                blurView.setOverlayColor(blurFrontColor);
+                                blurView.setOverlayColor(backgroundColor == -1 ? blurFrontColor : backgroundColor);
                                 blurView.setTag("blurView");
                                 blurView.setRadiusPx(style.messageDialogBlurSettings().blurBackgroundRoundRadiusPx());
                                 bkg.addView(blurView, 0, params);
@@ -297,6 +300,15 @@ public class MessageDialog extends BaseDialog {
         }
         
         public void refreshView() {
+            if (backgroundColor != -1) {
+                tintColor(bkg, backgroundColor);
+                if (style instanceof MaterialStyle) {
+                    tintColor(btnSelectOther, backgroundColor);
+                    tintColor(btnSelectNegative, backgroundColor);
+                    tintColor(btnSelectPositive, backgroundColor);
+                }
+            }
+            
             bkg.setMaxWidth(DialogX.dialogMaxWidth);
             if (me instanceof InputDialog) {
                 txtInput.setVisibility(View.VISIBLE);
@@ -744,4 +756,14 @@ public class MessageDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public int getBackgroundColor() {
+        return backgroundColor;
+    }
+    
+    public MessageDialog setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+        refreshUI();
+        return this;
+    }
 }

+ 15 - 3
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -11,6 +11,8 @@ import android.view.animation.DecelerateInterpolator;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.annotation.ColorInt;
+
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.impl.AnimatorListenerEndCallBack;
 import com.kongzue.dialogx.interfaces.BaseDialog;
@@ -210,7 +212,7 @@ public class WaitDialog extends BaseDialog {
                 if (overrideBackgroundColorRes == 0) {
                     overrideBackgroundColorRes = isLightTheme() ? R.color.dialogxWaitBkgDark : R.color.dialogxWaitBkgLight;
                 }
-                blurView.setOverlayColor(getResources().getColor(overrideBackgroundColorRes));
+                blurView.setOverlayColor(backgroundColor == -1 ? getResources().getColor(overrideBackgroundColorRes) : backgroundColor);
                 int overrideTextColorRes = style.overrideWaitTipRes().overrideTextColorRes(isLightTheme());
                 if (overrideTextColorRes == 0) {
                     overrideTextColorRes = isLightTheme() ? R.color.white : R.color.black;
@@ -220,11 +222,11 @@ public class WaitDialog extends BaseDialog {
                 blurView.setUseBlur(style.overrideWaitTipRes().blurBackground());
             } else {
                 if (isLightTheme()) {
-                    blurView.setOverlayColor(getResources().getColor(R.color.dialogxWaitBkgDark));
+                    blurView.setOverlayColor(backgroundColor == -1 ? getResources().getColor(R.color.dialogxWaitBkgDark) : backgroundColor);
                     progressView.setColor(Color.WHITE);
                     txtInfo.setTextColor(Color.WHITE);
                 } else {
-                    blurView.setOverlayColor(getResources().getColor(R.color.dialogxWaitBkgLight));
+                    blurView.setOverlayColor(backgroundColor == -1 ? getResources().getColor(R.color.dialogxWaitBkgLight) : backgroundColor);
                     progressView.setColor(Color.BLACK);
                     txtInfo.setTextColor(Color.BLACK);
                 }
@@ -378,4 +380,14 @@ public class WaitDialog extends BaseDialog {
         refreshUI();
         return this;
     }
+    
+    public int getBackgroundColor() {
+        return backgroundColor;
+    }
+    
+    public WaitDialog setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+        refreshUI();
+        return this;
+    }
 }

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

@@ -2,6 +2,7 @@ package com.kongzue.dialogx.interfaces;
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.Typeface;
 import android.util.Log;
@@ -13,6 +14,8 @@ import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import androidx.annotation.ColorInt;
+
 import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.impl.ActivityLifecycleImpl;
 import com.kongzue.dialogx.util.TextInfo;
@@ -84,6 +87,7 @@ public class BaseDialog {
     protected DialogXStyle style;
     protected DialogX.THEME theme;
     protected boolean autoShowInputKeyboard;
+    protected int backgroundColor = -1;
     
     public BaseDialog() {
         style = DialogX.globalStyle;
@@ -182,4 +186,8 @@ public class BaseDialog {
         if (rootFrameLayout == null) return null;
         return rootFrameLayout.get();
     }
+    
+    public void tintColor(View view, int color) {
+        view.setBackgroundTintList(ColorStateList.valueOf(color));
+    }
 }

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

@@ -121,10 +121,10 @@ public class MainActivity extends BaseActivity {
         DialogX.globalStyle = IOSStyle.style();
         
         boolean showBreak = parameter.getBoolean("showBreak");
-        if (showBreak){
-            MessageDialog.show("提示","接下来会直接运行一个 WaitDialog,2 秒后直接关闭 Activity,并回到原 Activity,保证程序不会出现 WindowLeaked 错误。\n\n" +
+        if (showBreak) {
+            MessageDialog.show("提示", "接下来会直接运行一个 WaitDialog,2 秒后直接关闭 Activity,并回到原 Activity,保证程序不会出现 WindowLeaked 错误。\n\n" +
                     "Android 原生 AlertDialog 常出现因 Dialog 先于 Activity 关闭而导致此错误引发程序崩溃。\n\n" +
-                    "而使用 DialogX 构建的对话框不仅仅不会出现此问题,还可避免因句柄持续持有导致的内存泄漏。","开始测试","取消")
+                    "而使用 DialogX 构建的对话框不仅仅不会出现此问题,还可避免因句柄持续持有导致的内存泄漏。", "开始测试", "取消")
                     .setOkButton(new OnDialogButtonClickListener() {
                         @Override
                         public boolean onClick(BaseDialog baseDialog, View v) {
@@ -134,7 +134,7 @@ public class MainActivity extends BaseActivity {
                                 public void run() {
                                     finish();
                                 }
-                            },2000);
+                            }, 2000);
                             return false;
                         }
                     })
@@ -433,11 +433,11 @@ public class MainActivity extends BaseActivity {
         btnCustomMessageDialog.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                MessageDialog.show("这里是标题","此对话框演示的是自定义对话框内部布局的效果","确定","取消")
+                MessageDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消")
                         .setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
                             @Override
                             public void onBind(MessageDialog dialog, View v) {
-        
+                            
                             }
                         });
             }
@@ -446,11 +446,11 @@ public class MainActivity extends BaseActivity {
         btnCustomInputDialog.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                InputDialog.show("这里是标题","此对话框演示的是自定义对话框内部布局的效果","确定","取消")
+                InputDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消")
                         .setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
                             @Override
                             public void onBind(MessageDialog dialog, View v) {
-                
+                            
                             }
                         });
             }
@@ -468,19 +468,19 @@ public class MainActivity extends BaseActivity {
                                 return false;
                             }
                         })
-                .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
-                    @Override
-                    public void onBind(BottomDialog dialog, View v) {
-        
-                    }
-                });
+                        .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
+                            @Override
+                            public void onBind(BottomDialog dialog, View v) {
+                            
+                            }
+                        });
             }
         });
         
         btnShowBreak.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                jump(MainActivity.class,new JumpParameter().put("showBreak",true));
+                jump(MainActivity.class, new JumpParameter().put("showBreak", true));
             }
         });
     }