Browse Source

自定义Dialog

niusongtao@dl-cg.com 5 years ago
parent
commit
039bbbeea2

+ 192 - 0
base_library/src/main/java/com/mgtech/base_library/util/CustomDialog.java

@@ -0,0 +1,192 @@
+package com.mgtech.base_library.util;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.mgtech.base_library.R;
+/**
+ * @ProjectName: TUA
+ * @Package: com.tennor.base_library.utils
+ * @ClassName: CustomDialog
+ * @Description: java类作用描述
+ * @Author: 牛松涛
+ * @CreateDate: 2020/4/1 13:06
+ * @UpdateUser: 更新者:
+ * @UpdateDate: 2020/4/1 13:06
+ * @UpdateRemark: 更新说明:
+ * @Version: 1.0
+ */
+public class CustomDialog extends Dialog {
+
+    public CustomDialog(Context context) {
+        super(context);
+    }
+
+    public CustomDialog(Context context, int theme) {
+        super(context, theme);
+    }
+
+    public static class Builder {
+        private Context context;
+        private String title;
+        private String message;
+        private String positiveButtonText;
+        private String negativeButtonText;
+        private View contentView;
+        private DialogInterface.OnClickListener positiveButtonClickListener;
+        private DialogInterface.OnClickListener negativeButtonClickListener;
+
+        public Builder(Context context) {
+            this.context = context;
+        }
+
+        public Builder setMessage(String message) {
+            this.message = message;
+            return this;
+        }
+
+        /**
+         * Set the Dialog message from resource
+         *
+         * @param
+         * @return
+         */
+        public Builder setMessage(int message) {
+            this.message = (String) context.getText(message);
+            return this;
+        }
+
+        /**
+         * Set the Dialog title from resource
+         *
+         * @param title
+         * @return
+         */
+        public Builder setTitle(int title) {
+            this.title = (String) context.getText(title);
+            return this;
+        }
+
+        /**
+         * Set the Dialog title from String
+         *
+         * @param title
+         * @return
+         */
+
+        public Builder setTitle(String title) {
+            this.title = title;
+            return this;
+        }
+
+        public Builder setContentView(View v) {
+            this.contentView = v;
+            return this;
+        }
+
+        /**
+         * Set the positive button resource and it's listener
+         *
+         * @param positiveButtonText
+         * @return
+         */
+        public Builder setPositiveButton(int positiveButtonText,
+                                         DialogInterface.OnClickListener listener) {
+            this.positiveButtonText = (String) context
+                    .getText(positiveButtonText);
+            this.positiveButtonClickListener = listener;
+            return this;
+        }
+
+        public Builder setPositiveButton(String positiveButtonText,
+                                         DialogInterface.OnClickListener listener) {
+            this.positiveButtonText = positiveButtonText;
+            this.positiveButtonClickListener = listener;
+            return this;
+        }
+
+        public Builder setNegativeButton(int negativeButtonText,
+                                         DialogInterface.OnClickListener listener) {
+            this.negativeButtonText = (String) context
+                    .getText(negativeButtonText);
+            this.negativeButtonClickListener = listener;
+            return this;
+        }
+
+        public Builder setNegativeButton(String negativeButtonText,
+                                         DialogInterface.OnClickListener listener) {
+            this.negativeButtonText = negativeButtonText;
+            this.negativeButtonClickListener = listener;
+            return this;
+        }
+
+        public CustomDialog create() {
+            LayoutInflater inflater = (LayoutInflater) context
+                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            // instantiate the dialog with the custom Theme
+            final CustomDialog dialog = new CustomDialog(context, R.style.Theme_AppCompat_Light_Dialog_Alert);
+            View layout = inflater.inflate(R.layout.dialog_ask, null);
+            dialog.addContentView(layout, new LinearLayout.LayoutParams(
+                    LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
+            // set the dialog title
+            ((TextView) layout.findViewById(R.id.dialog_title)).setText(title);
+            // set the confirm button
+            if (positiveButtonText != null) {
+                ((TextView) layout.findViewById(R.id.dialog_positive))
+                        .setText(positiveButtonText);
+                if (positiveButtonClickListener != null) {
+                    layout.findViewById(R.id.dialog_positive)
+                            .setOnClickListener(new View.OnClickListener() {
+                                public void onClick(View v) {
+                                    positiveButtonClickListener.onClick(dialog,
+                                            DialogInterface.BUTTON_POSITIVE);
+                                }
+                            });
+                }
+            } else {
+                // if no confirm button just set the visibility to GONE
+                layout.findViewById(R.id.dialog_positive).setVisibility(
+                        View.GONE);
+            }
+            // set the cancel button
+            if (negativeButtonText != null) {
+                ((TextView) layout.findViewById(R.id.dialog_negative))
+                        .setText(negativeButtonText);
+                if (negativeButtonClickListener != null) {
+                    layout.findViewById(R.id.dialog_negative)
+                            .setOnClickListener(new View.OnClickListener() {
+                                public void onClick(View v) {
+                                    negativeButtonClickListener.onClick(dialog,
+                                            DialogInterface.BUTTON_NEGATIVE);
+                                }
+                            });
+                }
+            } else {
+                // if no confirm button just set the visibility to GONE
+                layout.findViewById(R.id.dialog_negative).setVisibility(
+                        View.GONE);
+            }
+            // set the content message
+            if (message != null) {
+                ((TextView) layout.findViewById(R.id.dialog_message)).setText(message);
+            } else if (contentView != null) {
+                // if no message set
+                // add the contentView to the dialog body
+                ((LinearLayout) layout.findViewById(R.id.content))
+                        .removeAllViews();
+                ((LinearLayout) layout.findViewById(R.id.content))
+                        .addView(contentView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
+            }
+            dialog.setContentView(layout);
+            return dialog;
+        }
+    }
+}

+ 90 - 0
base_library/src/main/res/layout/dialog_ask.xml

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <com.coorchice.library.SuperTextView
+        android:id="@+id/dialog_bg"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_0"
+        android:alpha="0.8"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:stv_corner="@dimen/dp_15"
+        app:stv_solid="@color/f2f2f2" />
+
+
+    <TextView
+        android:id="@+id/dialog_title"
+        android:layout_width="@dimen/dp_0"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/dp_15"
+        android:layout_marginTop="@dimen/dp_20"
+        android:layout_marginEnd="@dimen/dp_15"
+        android:gravity="center"
+        android:textColor="@color/black"
+        android:textSize="@dimen/sp_17"
+        app:layout_constraintEnd_toEndOf="@id/dialog_bg"
+        app:layout_constraintStart_toStartOf="@id/dialog_bg"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <TextView
+        android:id="@+id/dialog_message"
+        android:layout_width="@dimen/dp_0"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/dp_15"
+        android:layout_marginTop="@dimen/dp_15"
+        android:layout_marginEnd="@dimen/dp_15"
+        android:gravity="center"
+        android:textColor="@color/black_alpha_50"
+        android:textSize="@dimen/sp_13"
+        app:layout_constraintEnd_toEndOf="@id/dialog_bg"
+        app:layout_constraintStart_toStartOf="@id/dialog_bg"
+        app:layout_constraintTop_toBottomOf="@id/dialog_title" />
+
+    <View
+        android:layout_width="@dimen/dp_0"
+        android:layout_height="@dimen/dp_1"
+        android:layout_marginTop="@dimen/dp_15"
+        android:background="@color/line_bg"
+        app:layout_constraintEnd_toEndOf="@id/dialog_bg"
+        app:layout_constraintStart_toStartOf="@id/dialog_bg"
+        app:layout_constraintTop_toBottomOf="@id/dialog_message" />
+
+    <TextView
+        android:id="@+id/dialog_negative"
+        android:layout_width="@dimen/dp_0"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/dp_15"
+        android:gravity="center"
+        android:paddingTop="@dimen/dp_15"
+        android:paddingBottom="@dimen/dp_15"
+        app:layout_constraintEnd_toStartOf="@id/dialog_positive"
+        app:layout_constraintStart_toStartOf="@id/dialog_bg"
+        app:layout_constraintTop_toBottomOf="@id/dialog_message" />
+
+    <View
+        android:layout_width="@dimen/dp_1"
+        android:layout_height="@dimen/dp_0"
+        android:background="@color/line_bg"
+        app:layout_constraintBottom_toBottomOf="@id/dialog_negative"
+        app:layout_constraintEnd_toStartOf="@id/dialog_positive"
+        app:layout_constraintStart_toEndOf="@id/dialog_negative"
+        app:layout_constraintTop_toTopOf="@id/dialog_negative" />
+
+    <TextView
+        android:id="@+id/dialog_positive"
+        android:layout_width="@dimen/dp_0"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/dp_15"
+        android:gravity="center"
+        android:paddingTop="@dimen/dp_15"
+        android:paddingBottom="@dimen/dp_15"
+        app:layout_constraintEnd_toEndOf="@id/dialog_bg"
+        app:layout_constraintStart_toEndOf="@id/dialog_negative"
+        app:layout_constraintTop_toBottomOf="@id/dialog_message" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
base_library/src/main/res/values/colors.xml

@@ -53,6 +53,7 @@
     <color name="gray_f8">#f8f8f8</color>
     <color name="gray_f6">#f6f6f6</color>
     <color name="all_yellow">#FFD700</color>
+    <color name="f2f2f2">#F2F2F2</color>
 
 
     <color name="biometricprompt_color_primary">#415FFF</color>

+ 20 - 0
base_library/src/main/res/values/styles.xml

@@ -78,4 +78,24 @@
         <item name="android:clickable">true</item>
     </style>
 
+
+    <style name="CustomDialog" parent="android:style/Theme.Holo.DialogWhenLarge">
+        <item name="android:windowBackground">@color/transparent</item>
+        <!--//设置dialog的背景,此处为系统给定的透明值 -->
+        <item name="android:windowFrame">@null</item>
+        <!--//Dialog的windowFrame框为无 -->
+        <item name="android:windowNoTitle">true</item>        
+        <!--//是否显示标题-->
+        <item name="android:windowIsFloating">true</item>
+        <!--//是否浮现在activity之上 -->
+        <item name="android:windowIsTranslucent">false</item>
+        <!--//是否半透明 -->
+        <item name="android:windowContentOverlay">@null</item>
+        <!--//是否有覆盖 -->
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+        <!--//设置Activity出现方式 -->
+        <item name="android:backgroundDimEnabled">false</item>
+        <!--//背景是否模糊显示 -->
+    </style>
+
 </resources>