나만의 AI/안드로이드 도와줘

Android Kotlin [Dialog 알려줘]

정혜현 2024. 8. 12. 09:57

Q. 어떻게 사용해?

A. 

 


DialogFragment

class AlertDialogFragment : DialogFragment() {//상속 받을 때 주의

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        //5초뒤
        _binding?.btnAlertDialog1?.setOnClickListener {
            selectedAlarm = 1
        }
        //하루 전
        _binding?.btnAlertDialog2?.setOnClickListener {
            selectedAlarm = 2
        }
        //당일
        _binding?.btnAlertDialog3?.setOnClickListener {
            selectedAlarm = 3
        }
        //완료
        _binding?.alertBtnDialogComplete?.setOnClickListener {
            exit()
        }
        //취소
        _binding?.alertBtnDialogBack?.setOnClickListener {
            selectedAlarm = 0
            exit()
        }
    }

    //디테일페이지로 돌아가는 함수
    private fun exit() {
        val dialogResult =
            ContactDetailFragment.newInstance(friend!!, selectedAlarm)
        requireActivity().supportFragmentManager.beginTransaction()
            .replace(R.id.frame_layout, dialogResult).addToBackStack(null).commit()
        dismiss()
    }

MaterialAlertDialogBuider()

private fun requireAlarmPermission() {
        MaterialAlertDialogBuilder(
            requireContext(), R.style.detail_dialog_alert
        )
            .setTitle(getString(R.string.alarm_ask_permission))
            .setNegativeButton(getString(R.string.move)) { dialog, which ->
                val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
                    putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName)
                }
                startActivity(intent)
            }
            .setPositiveButton(getString(R.string.cancel)) { dialog, which ->
                Toast.makeText(
                    requireContext(),
                    getString(R.string.alarm_need_permission),
                    Toast.LENGTH_LONG
                ).show()
            }
            .show()
        isNotCheck()
    }

 

values-style.xml

   <!-- 다이얼로그 -->

<style name="detail_dialog_alert" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
        <item name="android:background">@color/white</item>
        <item name="materialAlertDialogTitleTextStyle">@style/TitleTextStyle</item>
        <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
        <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
        <item name="android:dialogCornerRadius">15dp</item>
    </style>

    <style name="TitleTextStyle" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
        <item name="android:textColor">@color/black</item>
        <item name="android:textSize">18sp</item>
    </style>

    <style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">@color/primary</item>
        <item name="android:textSize">16sp</item>
        <item name="android:textStyle">bold</item>
        <item name="rippleColor">@color/primary</item>
    </style>

    <style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">@color/black</item>
        <item name="android:textSize">16sp</item>
        <item name="rippleColor">@color/white</item>
    </style>

 


AlertDialog, 뒤로가기 이벤트

 private fun btnBackListener() {
        val btnBackListener = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
            	//다이얼로그 빌더
                val builder = AlertDialog.Builder(this@MainPageActivity)
                builder.setTitle(getString(R.string.eco_market))//제목
                builder.setMessage(getString(R.string.ask_finish))//내용
                builder.setIcon(R.drawable.ic_logo_eco)//아이콘
				//버튼별 이벤트
                val btnListener = DialogInterface.OnClickListener { dialog, which ->
                    when (which) {
                        DialogInterface.BUTTON_POSITIVE -> finish()
                    }
                }
                builder.setPositiveButton(getString(R.string.yes), btnListener)
                builder.setNegativeButton(getString(R.string.no), btnListener)
                builder.show()
            }
        }
        onBackPressedDispatcher.addCallback(this, btnBackListener)
    }