0101011001010111

kotlin_Custom Dialog 본문

Kotlin/안드로이드_[숙련]앱개발

kotlin_Custom Dialog

[진주] 2023. 9. 14. 20:51
728x90
반응형

customDialog는 말 그대로, 

다이얼 로그를 custom 하는 거다. ( 원하는대로 꾸미기)

 

일단, 커스텀 다이얼로그를 하려면 xml 파일을 하나 추가해야한다.

이름과, 나이를 edittext로 넣는 다이얼로그를 만들어보자.

 

customdialog.xml

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp">


        <EditText
            android:id="@+id/edit_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Name"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:ignore="TouchTargetSizeCheck"/>

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Age"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/edit_name"
            tools:ignore="TouchTargetSizeCheck" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

 

package com.example.dialog

import android.content.DialogInterface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.EditText
import androidx.appcompat.app.AlertDialog
import com.example.dialog.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    // 바인딩 객체 선언
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 바인딩 객체 초기화
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
//1.기본 다이얼로그
        binding.DIALOG.setOnClickListener {
            var builder = AlertDialog.Builder(this)
            builder.setTitle("기본 다이얼로그 타이틀")
            builder.setMessage("기본 다이얼로그 메세지")
            builder.setIcon(R.mipmap.ic_launcher)


            //버튼 클릭 시, 어떤 작업을 할 것인가?
            val listener = object : DialogInterface.OnClickListener {
                override fun onClick(p0: DialogInterface?, p1: Int) {
                    when (p1) {
                        DialogInterface.BUTTON_POSITIVE ->
                            binding.textView.text = "BUTTON_POSITIVE"

                        DialogInterface.BUTTON_NEUTRAL ->
                            binding.textView.text = "BUTTON_NEUTRAL"

                        DialogInterface.BUTTON_NEGATIVE ->
                            binding.textView.text = "BUTTON_NEGATIVE"
                    }
                }
            }

            builder.setPositiveButton("Positive", listener)
            builder.setNegativeButton("Negative", listener)
            builder.setNeutralButton("Neutral", listener)

            builder.show()

        }


        //2.커스텀 다이얼로그
        binding.CUSTOMDIALOG.setOnClickListener {
            val builder = AlertDialog.Builder(this)
            builder.setTitle("커스텀 다이얼로그")
            builder.setIcon(R.mipmap.ic_launcher)

            val v1 = layoutInflater.inflate(R.layout.customdialog, null)
            builder.setView(v1)

            //p0에 해당 AlertDialog가 들어온다 FindViewById를 통해 view를 가져와서 사용. (근데 뷰바인딩이 있는데 굳이 ? )
            val listener = DialogInterface.OnClickListener { p0, p1 ->
                val alert = p0 as AlertDialog
                val edit1: EditText? = alert.findViewById<EditText>(R.id.edit_name)
                val edit2: EditText? = alert.findViewById<EditText>(R.id.edit_age)

                binding.textView.text = "이름 : ${edit1?.text}"
                binding.textView.append("/ 나이 : ${edit2?.text}")


            }

            builder.setPositiveButton("확인", listener)
            builder.setNegativeButton("취소", null)

            builder.show()

        }
    }
}

 

 

 

 

binding.textView.text = "이름 : ${edit1?.text}"
binding.textView.append("/ 나이 : ${edit2?.text}")

이 .append는 이름이 써지는 것 뒤에 들어가라는 얘기다.

 

그래서 이름 : ㅁㄴㅇㄹ  나이 23쓰면, 

이렇게 텍스트에 표시되게 된다. (왜냐면 .textview에 쓰는 것 이므로)

 

그리고 이 취소, 확인은, 

builder.setPositiveButton("확인", listener)
builder.setNegativeButton("취소", null)

builder.show()

이 부분이다.

 

또, 

val listener = DialogInterface.OnClickListener { p0, p1 ->
    val alert = p0 as AlertDialog
    val edit1: EditText? = alert.findViewById<EditText>(R.id.edit_name)
    val edit2: EditText? = alert.findViewById<EditText>(R.id.edit_age)

 

이 부분이다.

728x90
반응형

'Kotlin > 안드로이드_[숙련]앱개발' 카테고리의 다른 글

Kotlin_Time Picker Dialog_시간 다이얼로그  (0) 2023.09.18
kotlin_DatePickerDialog  (0) 2023.09.18
kotlin_Dialog  (0) 2023.09.14
1-4 프래그먼트Fragment  (0) 2023.08.28
1-3 RecyclerView  (1) 2023.08.27