Sfoglia il codice sorgente

引入通用提示弹框

Frankensteinly 9 mesi fa
parent
commit
69e1dfa80e

+ 94 - 0
app/src/main/java/com/grkj/iscs_mc/view/dialog/TipDialog.kt

@@ -0,0 +1,94 @@
+package com.grkj.iscs_mc.view.dialog
+
+import android.content.Context
+import android.view.View
+import com.grkj.iscs_mc.R
+import com.grkj.iscs_mc.view.base.BaseDialog
+import com.grkj.iscs_mc.databinding.DialogTipBinding
+import com.grkj.iscs_mc.util.Executor
+import java.util.Timer
+import java.util.TimerTask
+
+/**
+ * 通用提示弹框
+ */
+class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
+
+    private var confirmListener: (() -> Unit)? = null
+    private var cancelListener: (() -> Unit)? = null
+    private var mTimer: Timer? = null
+
+    companion object {
+        const val TYPE_CONFIRM = 0
+        const val TYPE_ALL = 1
+    }
+
+    override val viewBinding: DialogTipBinding
+        get() = DialogTipBinding.inflate(layoutInflater)
+
+    override fun initView() {
+        mBinding?.btnConfirm?.setOnClickListener {
+            dismiss()
+            confirmListener?.invoke()
+        }
+
+        mBinding?.btnCancel?.setOnClickListener {
+            dismiss()
+            cancelListener?.invoke()
+        }
+    }
+
+    fun setTip(tip: String) {
+        mBinding?.tvTip?.text = tip
+    }
+
+    fun setType(type: Int) {
+        when (type) {
+            TYPE_CONFIRM -> {
+                mBinding?.btnCancel?.visibility = View.GONE
+            }
+            TYPE_ALL -> {
+                mBinding?.btnCancel?.visibility = View.VISIBLE
+            }
+        }
+    }
+
+    /**
+     * 自动倒计时取消模式显示
+     */
+    fun showCancelCountdown(seconds: Int) {
+        mBinding?.btnCancel?.visibility = View.VISIBLE
+        mBinding?.btnCancel?.text = context.getString(R.string.cancel_countdown, seconds)
+
+        show()
+
+        var countSeconds = seconds
+        mTimer = Timer().apply {
+            schedule(object : TimerTask() {
+                override fun run() {
+                    Executor.runOnMain {
+                        mBinding?.btnCancel?.text = context.getString(R.string.cancel_countdown, countSeconds)
+                        if (countSeconds == 0) {
+                            dismiss()
+                            cancelListener?.invoke()
+                        }
+                        countSeconds--
+                    }
+                }
+            }, 0, 1000)
+        }
+    }
+
+    fun setConfirmListener(listener: () -> Unit) {
+        confirmListener = listener
+    }
+
+    fun setCancelListener(listener: () -> Unit) {
+        cancelListener = listener
+    }
+
+    override fun dismiss() {
+        super.dismiss()
+        mTimer?.cancel()
+    }
+}

+ 54 - 0
app/src/main/res/layout/dialog_tip.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    app:cardCornerRadius="@dimen/common_radius">
+
+    <RelativeLayout
+        android:layout_width="@dimen/dialog_tip_width"
+        android:layout_height="@dimen/dialog_tip_height">
+
+        <TextView
+            style="@style/CommonTextView"
+            android:layout_width="match_parent"
+            android:background="@color/main_color"
+            android:gravity="left"
+            android:paddingVertical="5dp"
+            android:paddingLeft="10dp"
+            android:text="@string/action_confirm" />
+
+        <TextView
+            android:id="@+id/tv_tip"
+            style="@style/CommonTextView"
+            android:layout_centerInParent="true"
+            android:textColor="@color/black"
+            android:textStyle="bold" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:layout_centerHorizontal="true"
+            android:layout_marginBottom="@dimen/common_spacing"
+            android:orientation="horizontal">
+
+            <TextView
+                android:id="@+id/btn_confirm"
+                style="@style/CommonBtnBlue"
+                android:layout_width="80dp"
+                android:layout_height="25dp"
+                android:backgroundTint="#E600AE00"
+                android:text="@string/confirm" />
+
+            <TextView
+                android:id="@+id/btn_cancel"
+                style="@style/CommonBtnBlue"
+                android:layout_width="80dp"
+                android:layout_height="25dp"
+                android:layout_marginLeft="@dimen/common_spacing"
+                android:backgroundTint="#99FF0000"
+                android:text="@string/cancel" />
+        </LinearLayout>
+    </RelativeLayout>
+</androidx.cardview.widget.CardView>

+ 3 - 0
app/src/main/res/values/dimens.xml

@@ -40,4 +40,7 @@
     <dimen name="home_module_width">200dp</dimen>
     <dimen name="home_module_height">110dp</dimen>
     <dimen name="home_module_icon_size">66dp</dimen>
+
+    <dimen name="dialog_tip_width">256dp</dimen>
+    <dimen name="dialog_tip_height">144dp</dimen>
 </resources>

+ 4 - 0
app/src/main/res/values/strings.xml

@@ -33,4 +33,8 @@
     <string name="material_replacement">物资更换</string>
     <string name="material_replacement_english">Materials Replacement</string>
     <string name="exception_handle">异常处理</string>
+
+    <string name="action_confirm">操作确认</string>
+    <string name="confirm">确定</string>
+    <string name="cancel_countdown">取消(%d秒)</string>
 </resources>