→ 위치 커스텀

class PermissionDialog(
    context: Context,
    private val description: String,
    private val confirmBtnClickListener: () -> Unit,
    private val refuseBtnClickListener: () -> Unit
) : Dialog(context) {

    private lateinit var binding: DialogPermissionBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        initView()
    }

    private fun initView() = with(binding) {
				...
        window?.attributes?.y = 200
        ...
    }
}
<?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"
    android:layout_marginHorizontal="34dp"
    android:background="@drawable/rect_whitefill_nostroke_30radius">

    <TextView
        android:id="@+id/tv_announce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="50dp"
        android:text="기기의 네트워크 상태를 확인해 주세요."
        android:textColor="@color/black"
        android:textSize="16sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.divider.MaterialDivider
        android:id="@+id/divider"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:background="#E9EBEE"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tv_announce" />

    <TextView
        android:id="@+id/tv_retry"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:paddingBottom="20dp"
        android:text="재시도"
        android:textColor="@color/black"
        android:textSize="14sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/divider" />

</androidx.constraintlayout.widget.ConstraintLayout>
class AnnounceDialog(
    context: Context,
    private val text: String,
    private val btnClickListener: () -> Unit
): Dialog(context){

    private lateinit var binding: DialogAnnounceBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DialogAnnounceBinding.inflate(layoutInflater)
        setContentView(binding.root)
        initView()
    }

    private fun initView() = with(binding) {
        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        tvAnnounce.text = text
        tvRetry.setOnClickListener {
            btnClickListener()
        }
    }
}
private lateinit var announceDialog : AnnounceDialog

fun showAnnounce(
        text: String,
      btnClickListener: () -> Unit
) {
    announceDialog = AnnounceDialog(this,text,btnClickListener)
    announceDialog.show()
}

fun dismissAnnounce(){
    announceDialog.dismiss()
}