diff --git a/LibDialog/build.gradle b/LibDialog/build.gradle index 4b834aca8ede0abd7ce7452b483871b8c2aa95a6..89957a34aaf35223afa27997ee6330fd95a3fc82 100644 --- a/LibDialog/build.gradle +++ b/LibDialog/build.gradle @@ -33,7 +33,7 @@ afterEvaluate { groupId = 'com.mx.dialog' artifactId = 'MXDialog' - version = '1.0.0' + version = '1.0.9' } } } diff --git a/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt b/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt index d6b04898d965f24552b02d330bd6993486c4b1c8..9ecb35c4ff788f460a69788a50f0de356d6b1cad 100644 --- a/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/MXDialog.kt @@ -6,6 +6,7 @@ import com.mx.dialog.list.MXListDialog import com.mx.dialog.tip.MXDialogPosition import com.mx.dialog.tip.MXDialogType import com.mx.dialog.tip.MXTipDialog +import com.mx.dialog.utils.IMXLifecycle import com.mx.dialog.utils.MXUtils object MXDialog { @@ -13,6 +14,19 @@ object MXDialog { MXUtils.setDebug(debug) } + private val lifecycleList = ArrayList() + internal fun getLifecycleList(): List { + return lifecycleList.toList() + } + + fun addLifecycle(lifecycle: IMXLifecycle) { + lifecycleList.add(lifecycle) + } + + fun removeLifecycle(lifecycle: IMXLifecycle) { + lifecycleList.remove(lifecycle) + } + /** * 需要用户确认的操作,无法返回且只能点击确认/取消 * @param message 消息内容 @@ -21,7 +35,6 @@ object MXDialog { * @param cancelButtonText 取消按钮文字 * @param onActionClick 操作点击回调、 * @param maxContentRatio 内容最大高度比 - * @param fullScreen 全屏模式 */ fun confirm( context: Context, @@ -31,10 +44,9 @@ object MXDialog { cancelButtonText: CharSequence? = null, cancelable: Boolean = true, maxContentRatio: Float = 1f, - fullScreen: Boolean = false, onActionClick: ((confirm: Boolean) -> Unit)? = null ) { - val dialog = MXTipDialog(context, fullScreen) + val dialog = MXTipDialog(context) dialog.setTitle(title) dialog.setMessage(message) dialog.setMaxContentRatio(maxContentRatio) @@ -60,15 +72,13 @@ object MXDialog { * @param maxContentRatio 内容最大高度比 * @param dismissDelay x秒后弹窗消失 * @param dialogType Icon类型 - * @param fullScreen 全屏模式 */ fun tip( context: Context, message: CharSequence, title: CharSequence? = null, actionButtonText: CharSequence? = null, maxContentRatio: Float = 1f, - dismissDelay: Int? = null, dialogType: MXDialogType? = null, - fullScreen: Boolean = false + dismissDelay: Int? = null, dialogType: MXDialogType? = null ) { - val dialog = MXTipDialog(context, fullScreen) + val dialog = MXTipDialog(context) dialog.setTitle(title) dialog.setMessage(message) dialog.setCancelable(true) @@ -97,10 +107,9 @@ object MXDialog { textColor: Int? = null, textSizeSP: Float? = null, textGravity: Int? = Gravity.LEFT or Gravity.CENTER_VERTICAL, - fullScreen: Boolean = false, select: ((index: Int) -> Unit) ) { - MXListDialog(context, fullScreen).apply { + MXListDialog(context).apply { setTitle(title) setContentMaxHeightRatio(contentMaxHeightRatio) setContentCornerRadius(contentRadiusDP) @@ -131,10 +140,9 @@ object MXDialog { textColor: Int? = null, textSizeSP: Float? = null, textGravity: Int? = Gravity.LEFT or Gravity.CENTER_VERTICAL, - fullScreen: Boolean = false, select: ((list: List) -> Unit) ) { - MXListDialog(context, fullScreen).apply { + MXListDialog(context).apply { setTitle(title) setContentMaxHeightRatio(contentMaxHeightRatio) setContentCornerRadius(contentRadiusDP) diff --git a/LibDialog/src/main/java/com/mx/dialog/base/MXBaseCardDialog.kt b/LibDialog/src/main/java/com/mx/dialog/base/MXBaseCardDialog.kt index 1339b2addc01439a852724766be84c2cc2e5fb7b..3846bfe9cf717fb24949840fbdc92937b0f98eb9 100644 --- a/LibDialog/src/main/java/com/mx/dialog/base/MXBaseCardDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/base/MXBaseCardDialog.kt @@ -15,8 +15,7 @@ import com.mx.dialog.utils.MXUtils * 集成内容定位的功能 * 详情见:setPosition() */ -abstract class MXBaseCardDialog(context: Context, fullScreen: Boolean = false) : - MXBaseDialog(context, fullScreen) { +abstract class MXBaseCardDialog(context: Context) : MXBaseDialog(context) { private var includeStatusBarHeight: Boolean = false private var includeNavigationBarHeight: Boolean = false diff --git a/LibDialog/src/main/java/com/mx/dialog/base/MXBaseDialog.kt b/LibDialog/src/main/java/com/mx/dialog/base/MXBaseDialog.kt index bb8860b37946739ed7f3cdc47b3fe18b87d11dbd..2e4b6922ea23d1e37d04d6d60f6b71fb044da3ac 100644 --- a/LibDialog/src/main/java/com/mx/dialog/base/MXBaseDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/base/MXBaseDialog.kt @@ -3,13 +3,20 @@ package com.mx.dialog.base import android.app.Dialog import android.content.Context import android.content.DialogInterface +import android.graphics.Color +import android.os.Build import android.os.Bundle +import android.view.Gravity +import android.view.View +import android.view.Window import android.view.WindowManager import android.view.inputmethod.InputMethodManager import android.widget.EditText +import com.mx.dialog.MXDialog import com.mx.dialog.R import com.mx.dialog.utils.MXDialogDelay + /** * 所有Dialog的基类 * 1:所有弹窗设置成全屏弹窗 @@ -18,10 +25,7 @@ import com.mx.dialog.utils.MXDialogDelay * 4:统一OnCancel监听、统一返回按键处理 * 5:设置弹窗延时消失 */ -open class MXBaseDialog(context: Context, private val fullScreen: Boolean = false) : - Dialog(context, if (fullScreen) R.style.MXDialog_FullScreen else R.style.MXDialog_Base) { - fun isFullScreen() = fullScreen - +open class MXBaseDialog(private val mContext: Context) : Dialog(mContext, R.style.MXDialog_Base) { private val dialogDelay = MXDialogDelay() // 弹窗消失回调 @@ -38,17 +42,7 @@ open class MXBaseDialog(context: Context, private val fullScreen: Boolean = fals override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - window?.let { window -> - window.decorView.setPadding(0, 0, 0, 0) - window.attributes.let { lp -> - lp.y = 0 - lp.width = WindowManager.LayoutParams.MATCH_PARENT - lp.height = WindowManager.LayoutParams.MATCH_PARENT - window.attributes = lp - } - - window.setWindowAnimations(R.style.mx_dialog_animation) - } + window?.let { initWindow(it) } dialogDelay.setTicketCall { finish, maxSecond, remindSecond -> if (finish) { onDismissTicketEnd() @@ -56,6 +50,38 @@ open class MXBaseDialog(context: Context, private val fullScreen: Boolean = fals onDismissTicket(maxSecond, remindSecond) } } + + for (lifecycle in MXDialog.getLifecycleList()) { + lifecycle.onCreate(mContext, this) + } + } + + open fun initWindow(window: Window) { + // 保证dialog宽度占满 + window.setGravity(Gravity.BOTTOM) + window.decorView.setPadding(0, 0, 0, 0) + val layoutParams = window.attributes + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT + layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT + window.attributes = layoutParams + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0 全透明实现 + val lp = window.attributes + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + lp.layoutInDisplayCutoutMode = + WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES + } + window.attributes = lp + window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + window.statusBarColor = Color.TRANSPARENT + window.navigationBarColor = Color.TRANSPARENT + } else { //4.4 全透明状态栏 + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) + } + window.setWindowAnimations(R.style.mx_dialog_animation) } override fun onStart() { @@ -105,6 +131,10 @@ open class MXBaseDialog(context: Context, private val fullScreen: Boolean = fals } hideSoftInput() dialogDelay.stop() + + for (lifecycle in MXDialog.getLifecycleList()) { + lifecycle.onDismiss(mContext, this) + } super.dismiss() } @@ -117,7 +147,7 @@ open class MXBaseDialog(context: Context, private val fullScreen: Boolean = fals // 解决键盘弹出的问题 val focus = currentFocus ?: return if (focus is EditText) { - val imm = context.getSystemService( + val imm = mContext.getSystemService( Context.INPUT_METHOD_SERVICE ) as InputMethodManager imm.hideSoftInputFromWindow(focus.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) diff --git a/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt b/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt index a1feead37faee3fbf844451e60f72811360c57dc..6b811e85c85b7904859aa054fa1a22e58089351a 100644 --- a/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/list/MXBaseListDialog.kt @@ -17,8 +17,7 @@ import com.mx.dialog.utils.MXTextProp import com.mx.dialog.utils.MXUtils import com.mx.dialog.views.MXRatioFrameLayout -open class MXBaseListDialog(context: Context, fullScreen: Boolean = false) : - MXBaseDialog(context, fullScreen) { +open class MXBaseListDialog(context: Context) : MXBaseDialog(context) { private var includeStatusBarHeight: Boolean = false private var includeNavigationBarHeight: Boolean = false @@ -52,13 +51,13 @@ open class MXBaseListDialog(context: Context, fullScreen: Boolean = false) : private fun initView() { if (mxRootLay == null) mxRootLay = findViewById(R.id.mxRootLay) if (mxCardLay == null) mxCardLay = findViewById(R.id.mxCardLay) - if (btnLay == null) btnLay = findViewById(R.id.btnLay) - if (contentLay == null) contentLay = findViewById(R.id.contentLay) - if (btnDivider == null) btnDivider = findViewById(R.id.btnDivider) - if (cancelBtn == null) cancelBtn = findViewById(R.id.cancelBtn) - if (okBtn == null) okBtn = findViewById(R.id.okBtn) - if (titleTxv == null) titleTxv = findViewById(R.id.titleTxv) - if (titleLay == null) titleLay = findViewById(R.id.titleLay) + if (btnLay == null) btnLay = findViewById(R.id.mxBtnLay) + if (contentLay == null) contentLay = findViewById(R.id.mxContentLay) + if (btnDivider == null) btnDivider = findViewById(R.id.mxBtnDivider) + if (cancelBtn == null) cancelBtn = findViewById(R.id.mxCancelBtn) + if (okBtn == null) okBtn = findViewById(R.id.mxOkBtn) + if (titleTxv == null) titleTxv = findViewById(R.id.mxTitleTxv) + if (titleLay == null) titleLay = findViewById(R.id.mxTitleLay) if (listView == null) listView = findViewById(R.id.listView) } diff --git a/LibDialog/src/main/java/com/mx/dialog/list/MXListDialog.kt b/LibDialog/src/main/java/com/mx/dialog/list/MXListDialog.kt index ba6a47ba3a20540cb3cff89c0d7072a165f069fa..b42f397b467e0853c1e8293bc793ff0687d9c70e 100644 --- a/LibDialog/src/main/java/com/mx/dialog/list/MXListDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/list/MXListDialog.kt @@ -9,8 +9,8 @@ import android.widget.TextView import com.mx.dialog.R import com.mx.dialog.utils.MXTextProp -open class MXListDialog(context: Context, fullScreen: Boolean = false) : - MXBaseListDialog(context, fullScreen) { +open class MXListDialog(context: Context) : + MXBaseListDialog(context) { private var isSingleSelectMod = true private var onSingleSelect: ((Int) -> Unit)? = null private var onMultipleSelect: ((List) -> Unit)? = null @@ -19,8 +19,8 @@ open class MXListDialog(context: Context, fullScreen: Boolean = false) : private val listItemProp = MXTextProp() private val listAdapt by lazy { MXBaseListAdapt(context, R.layout.mx_dialog_list_item) { itemView, position, item -> - val infoTxv = itemView.findViewById(R.id.infoTxv) - val selectTag = itemView.findViewById(R.id.selectTag) + val infoTxv = itemView.findViewById(R.id.mxInfoTxv) + val selectTag = itemView.findViewById(R.id.mxSelectTag) listItemProp.attachTextHeight(infoTxv, R.dimen.mx_dialog_size_list_item_height) listItemProp.attachTextColor(infoTxv, R.color.mx_dialog_color_text) listItemProp.attachTextStyle(infoTxv, Typeface.NORMAL) diff --git a/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt b/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt index 99c15424399beca4699c18eb0eb22c6914973ad8..db5bb15a6638d19a61adc8a19c1f3c0c26ea1bd0 100644 --- a/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt @@ -10,8 +10,7 @@ import android.widget.TextView import com.mx.dialog.R import com.mx.dialog.base.MXBaseCardDialog -open class MXLoadingDialog(context: Context, fullScreen: Boolean = false) : - MXBaseCardDialog(context, fullScreen) { +open class MXLoadingDialog(context: Context) : MXBaseCardDialog(context) { private var loadingMessage: CharSequence? = null private var indeterminateDrawable: Drawable? = null @@ -36,8 +35,8 @@ open class MXLoadingDialog(context: Context, fullScreen: Boolean = false) : } private fun initView() { - progressBar = findViewById(R.id.progressBar) - loadingTxv = findViewById(R.id.loadingTxv) + progressBar = findViewById(R.id.mxProgressBar) + loadingTxv = findViewById(R.id.mxLoadingTxv) } private fun initData() { diff --git a/LibDialog/src/main/java/com/mx/dialog/tip/MXTipBaseDialog.kt b/LibDialog/src/main/java/com/mx/dialog/tip/MXTipBaseDialog.kt index 55971e89580716a813d58fd8675fac308686392c..cbc2788a4811cb14703028598fd700cf2daf6e0e 100644 --- a/LibDialog/src/main/java/com/mx/dialog/tip/MXTipBaseDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/tip/MXTipBaseDialog.kt @@ -15,8 +15,7 @@ import com.mx.dialog.utils.MXTextProp import com.mx.dialog.utils.MXUtils import com.mx.dialog.views.MXRatioFrameLayout -abstract class MXTipBaseDialog(context: Context, fullScreen: Boolean = false) : - MXBaseCardDialog(context, fullScreen) { +abstract class MXTipBaseDialog(context: Context) : MXBaseCardDialog(context) { private var btnLay: LinearLayout? = null private var tipTypeImg: ImageView? = null private var contentLay: MXRatioFrameLayout? = null @@ -45,7 +44,7 @@ abstract class MXTipBaseDialog(context: Context, fullScreen: Boolean = false) : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - contentLay = findViewById(R.id.contentLay) + contentLay = findViewById(R.id.mxContentLay) // 从重构方法创建Content内容 generalContentView(contentLay!!)?.let { view -> contentLay?.removeAllViews() @@ -62,13 +61,13 @@ abstract class MXTipBaseDialog(context: Context, fullScreen: Boolean = false) : abstract fun generalContentView(parent: FrameLayout): View? protected open fun initView() { - btnLay = findViewById(R.id.btnLay) - tipTypeImg = findViewById(R.id.tipTypeImg) - titleTxv = findViewById(R.id.titleTxv) - delayTxv = findViewById(R.id.delayTxv) - cancelBtn = findViewById(R.id.cancelBtn) - btnDivider = findViewById(R.id.btnDivider) - actionBtn = findViewById(R.id.okBtn) + btnLay = findViewById(R.id.mxBtnLay) + tipTypeImg = findViewById(R.id.mxTipTypeImg) + titleTxv = findViewById(R.id.mxTitleTxv) + delayTxv = findViewById(R.id.mxDelayTxv) + cancelBtn = findViewById(R.id.mxCancelBtn) + btnDivider = findViewById(R.id.mxBtnDivider) + actionBtn = findViewById(R.id.mxOkBtn) } override fun onDismissTicket(maxSecond: Int, remindSecond: Int) { diff --git a/LibDialog/src/main/java/com/mx/dialog/tip/MXTipDialog.kt b/LibDialog/src/main/java/com/mx/dialog/tip/MXTipDialog.kt index 7a510a4013c77eef02c0fb4bf55f32710fb645ba..fcd3e12f3d8a094a7bf5826c15d40ee10385a427 100644 --- a/LibDialog/src/main/java/com/mx/dialog/tip/MXTipDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/tip/MXTipDialog.kt @@ -11,8 +11,7 @@ import android.widget.ScrollView import android.widget.TextView import com.mx.dialog.R -open class MXTipDialog(context: Context, fullScreen: Boolean = false) : - MXTipBaseDialog(context, fullScreen) { +open class MXTipDialog(context: Context) : MXTipBaseDialog(context) { private var msgTypeface: Typeface? = null private var msgStr: CharSequence? = null private var msgColor: Int? = null @@ -25,8 +24,8 @@ open class MXTipDialog(context: Context, fullScreen: Boolean = false) : override fun initView() { super.initView() - msgTxv = findViewById(R.id.msgTxv) - tipScrollView = findViewById(R.id.tipScrollView) + msgTxv = findViewById(R.id.mxMsgTxv) + tipScrollView = findViewById(R.id.mxTipScrollView) } override fun initDialog() { diff --git a/LibDialog/src/main/java/com/mx/dialog/upgrade/MXUpgradeDialog.kt b/LibDialog/src/main/java/com/mx/dialog/upgrade/MXUpgradeDialog.kt index 44fd5bff2927a17f2c77385c3e55af23c360a185..71fb353c08a88c64630c0b8a93cff075088e55e2 100644 --- a/LibDialog/src/main/java/com/mx/dialog/upgrade/MXUpgradeDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/upgrade/MXUpgradeDialog.kt @@ -16,8 +16,7 @@ import kotlin.concurrent.thread import kotlin.math.abs import kotlin.math.roundToInt -open class MXUpgradeDialog(context: Context, fullScreen: Boolean = false) : - MXBaseCardDialog(context, fullScreen) { +open class MXUpgradeDialog(context: Context) : MXBaseCardDialog(context) { private val mHandler = Handler(Looper.getMainLooper()) private var closeBtn: ImageView? = null private var titleTxv: TextView? = null @@ -40,10 +39,10 @@ open class MXUpgradeDialog(context: Context, fullScreen: Boolean = false) : super.onCreate(savedInstanceState) setCanceledOnTouchOutside(false) closeBtn = findViewById(R.id.closeBtn) - titleTxv = findViewById(R.id.titleTxv) - contentLay = findViewById(R.id.contentLay) - msgTxv = findViewById(R.id.msgTxv) - progressBar = findViewById(R.id.progressBar) + titleTxv = findViewById(R.id.mxTitleTxv) + contentLay = findViewById(R.id.mxContentLay) + msgTxv = findViewById(R.id.mxMsgTxv) + progressBar = findViewById(R.id.mxProgressBar) actionBtn = findViewById(R.id.actionBtn) contentLay?.setMaxHeightRatio(0.5f) diff --git a/LibDialog/src/main/java/com/mx/dialog/utils/IMXLifecycle.kt b/LibDialog/src/main/java/com/mx/dialog/utils/IMXLifecycle.kt new file mode 100644 index 0000000000000000000000000000000000000000..28731e79cbf9627e7254589fe0a154a2af0ff0d4 --- /dev/null +++ b/LibDialog/src/main/java/com/mx/dialog/utils/IMXLifecycle.kt @@ -0,0 +1,12 @@ +package com.mx.dialog.utils + +import android.app.Dialog +import android.content.Context + +/** + * 插件生命周期注入方法 + */ +interface IMXLifecycle { + fun onCreate(context: Context, dialog: Dialog) + fun onDismiss(context: Context, dialog: Dialog) +} \ No newline at end of file diff --git a/LibDialog/src/main/res/layout/mx_content_loading.xml b/LibDialog/src/main/res/layout/mx_content_loading.xml index 948f746cd68b9a345f87a832efe55ae89d68d14c..e80d7145c91b93fdfc2e61274ad1f1875bd0a76f 100644 --- a/LibDialog/src/main/res/layout/mx_content_loading.xml +++ b/LibDialog/src/main/res/layout/mx_content_loading.xml @@ -8,7 +8,7 @@ android:paddingVertical="20dp"> @@ -61,20 +61,20 @@ android:background="@color/mx_dialog_color_divider" /> diff --git a/LibDialog/src/main/res/layout/mx_content_tip_textview.xml b/LibDialog/src/main/res/layout/mx_content_tip_textview.xml index bff9cdc5dbd90727abd47a0a7964d0a02c738279..82ec42e479834fc0405e9a86101096dd9ff4b140 100644 --- a/LibDialog/src/main/res/layout/mx_content_tip_textview.xml +++ b/LibDialog/src/main/res/layout/mx_content_tip_textview.xml @@ -1,11 +1,11 @@ @@ -60,26 +60,26 @@ @@ -57,7 +57,7 @@ android:scrollbars="none"> + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LibDialog/src/main/res/values/styles.xml b/LibDialog/src/main/res/values/styles.xml index e51c306c00231788fe8ac7ba521af6f3e11ef4f7..1889c5d045bb9db6d86365da85992db6a03b1470 100644 --- a/LibDialog/src/main/res/values/styles.xml +++ b/LibDialog/src/main/res/values/styles.xml @@ -5,18 +5,12 @@ @null true false - false true @android:color/transparent @android:color/transparent false - - -