feat(modal): V2 공통 모달창을 추가한다
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package kr.co.vividnext.sodalive.v2.components.modal
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import kr.co.vividnext.sodalive.databinding.DialogV2ModalBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
|
||||
class V2ModalDialog(
|
||||
activity: Activity,
|
||||
layoutInflater: LayoutInflater,
|
||||
title: String,
|
||||
desc: String,
|
||||
confirmButtonTitle: String,
|
||||
confirmButtonClick: () -> Unit,
|
||||
cancelButtonTitle: String = "",
|
||||
cancelButtonClick: (() -> Unit)? = null
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
private var isButtonClicked = false
|
||||
|
||||
val dialogView = DialogV2ModalBinding.inflate(layoutInflater)
|
||||
|
||||
init {
|
||||
val dialogBuilder = AlertDialog.Builder(activity)
|
||||
dialogBuilder.setView(dialogView.root)
|
||||
|
||||
alertDialog = dialogBuilder.create()
|
||||
alertDialog.setCancelable(false)
|
||||
alertDialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
|
||||
|
||||
dialogView.tvTitle.text = title
|
||||
dialogView.tvDesc.text = desc
|
||||
|
||||
dialogView.tvCancel.text = cancelButtonTitle
|
||||
dialogView.tvCancel.setOnClickListener {
|
||||
dismissAndRun {
|
||||
cancelButtonClick?.invoke()
|
||||
}
|
||||
}
|
||||
|
||||
dialogView.tvConfirm.text = confirmButtonTitle
|
||||
dialogView.tvConfirm.setOnClickListener {
|
||||
dismissAndRun(confirmButtonClick)
|
||||
}
|
||||
|
||||
dialogView.tvCancel.visibility = if (cancelButtonTitle.isNotBlank()) {
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
fun show(width: Int) {
|
||||
alertDialog.show()
|
||||
|
||||
val lp = WindowManager.LayoutParams()
|
||||
lp.copyFrom(alertDialog.window?.attributes)
|
||||
lp.width = width - (26.7f.dpToPx()).toInt()
|
||||
lp.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||
|
||||
alertDialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
|
||||
alertDialog.window?.attributes = lp
|
||||
}
|
||||
|
||||
private fun dismissAndRun(action: () -> Unit) {
|
||||
if (isButtonClicked) return
|
||||
isButtonClicked = true
|
||||
alertDialog.dismiss()
|
||||
action()
|
||||
}
|
||||
}
|
||||
5
app/src/main/res/drawable/bg_v2_modal.xml
Normal file
5
app/src/main/res/drawable/bg_v2_modal.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/gray_900" />
|
||||
<corners android:radius="@dimen/radius_14" />
|
||||
</shape>
|
||||
71
app/src/main/res/layout/dialog_v2_modal.xml
Normal file
71
app/src/main/res/layout/dialog_v2_modal.xml
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/bg_v2_modal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/bold"
|
||||
android:gravity="center"
|
||||
android:minHeight="64dp"
|
||||
android:paddingHorizontal="@dimen/spacing_20"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="20sp"
|
||||
tools:text="모달" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_desc"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/regular"
|
||||
android:gravity="center"
|
||||
android:lineSpacingMultiplier="1.45"
|
||||
android:padding="@dimen/spacing_20"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="16sp"
|
||||
tools:text="모달 안내 문구가\n들어가는 부분입니다." />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:paddingHorizontal="@dimen/spacing_20"
|
||||
android:paddingVertical="@dimen/spacing_14"
|
||||
tools:ignore="UseCompoundDrawables">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_cancel"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/spacing_8"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="@font/medium"
|
||||
android:gravity="center"
|
||||
android:padding="@dimen/spacing_14"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="18sp"
|
||||
tools:text="취소" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_confirm"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:fontFamily="@font/medium"
|
||||
android:gravity="center"
|
||||
android:padding="@dimen/spacing_14"
|
||||
android:textColor="@color/soda_400"
|
||||
android:textSize="18sp"
|
||||
tools:text="확인" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user