Kotlin

[android : kotlin] 코틀린 다이얼로그 (Dialog) 사용 예제 – AlertDialog, DatePickerDialog, TimePickerDialog

AlertDialog는 작은 팝업창을 의미한다. AlertDialog.Buider() 메서드를 사용하여 생성한다. 간단하게 사용하기에 용이하지만 텍스트위치 버튼 위치 등 UI를 변경할 수 없다. 기본적으로 3가지 버튼을 지원한다. DialogInterface.BUTTON_POSITIVE : 예

DialogInterface.BUTTON_NEUTRAL : 중립

DialogInterface.BUTTON_NEGATIVE : 아니오

DialogInterface 클래스의 OnClickListener를 사용하여 설정할 수 있다.

 

커스텀 다이얼로그는 layoutInflater를 사용하여 내가 만든 Layout를 가져와서 설정할 수 있다. DialogInterface 클래스의 OnClickListener를 사용하여 Layout에 정의한 각각의 뷰에 대한 처리를 해주면 된다.

 

날짜를 보여죽 싶을 때는 DatePickerDialog를 사용하며, 시간을 보여주고 싶을 때는 TimePickerDialog를 사용한다.

Calendar클래스에서 년월일시 정보를 가져와 다이얼로그에 각각 인자로 전달하여 처리한다. 아래 코드를 참고하면 이해가 빠를 것이다.

 

[MainActivity.kt]

package edu.kotlin.study

import android.app.DatePickerDialog 
import android.app.TimePickerDialog
import android.content.DialogInterface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle 
import android.widget.EditText 
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //기본 Dialog
        btn1.setOnClickListener {
            var builder = AlertDialog.Builder(this)
            builder.setTitle("기본 Dialog")
            builder.setMessage("앱을 종료할래요?")
            builder.setIcon(R.mipmap.ic_launcher)

            // 버튼 클릭시에 무슨 작업을 할 것인가!
            var listener = DialogInterface.OnClickListener { _, p1 ->
                when (p1) {
                    DialogInterface.BUTTON_POSITIVE ->
                        textView1.text = "예"
                    DialogInterface.BUTTON_NEUTRAL ->
                        textView1.text = "리뷰"
                    DialogInterface.BUTTON_NEGATIVE ->
                        textView1.text = "아니오"
                }
            }

            builder.setPositiveButton("예", listener)
            builder.setNegativeButton("아니오", listener)
            builder.setNeutralButton("리뷰 남기기", listener)

            builder.show()
        }

        //커스텀 다이얼로그
        btn2.setOnClickListener {
            var builder = AlertDialog.Builder(this)
            builder.setTitle("커스텀 다이얼로그")
            builder.setIcon(R.mipmap.ic_launcher)
            builder.setView(layoutInflater.inflate(R.layout.activity_dialog, null))

            var listener = DialogInterface.OnClickListener { p0, _ ->
                var dialog = p0 as AlertDialog
                var editText1: EditText? = dialog.findViewById<EditText>(R.id.editText)
                var editText2: EditText? = dialog.findViewById<EditText>(R.id.editText2)

                textView1.text = "${editText1?.text}"
                textView1.append("${editText2?.text}")
            }

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

            builder.show()
        }

        //날짜 다이얼로그
        btn3.setOnClickListener {
            var calendar = Calendar.getInstance()
            var year = calendar.get(Calendar.YEAR)
            var month = calendar.get(Calendar.MONTH)
            var day = calendar.get(Calendar.DAY_OF_MONTH)

            var listener = DatePickerDialog.OnDateSetListener { _, i, i2, i3 ->
                textView1.text = "${i}년 ${i2 + 1}월 ${i3}일"
            }

            var picker = DatePickerDialog(this, listener, year, month, day)
            picker.show()
        }

        //시간 다이얼로그
        btn4.setOnClickListener {
            var calendar = Calendar.getInstance()
            var hour = calendar.get(Calendar.HOUR)
            var minute = calendar.get(Calendar.MINUTE)

            var listener = TimePickerDialog.OnTimeSetListener { _, i, i2 ->
                textView1.text = "${i}시 ${i2}분"
            }

            // boolean is24HourView : true일 때 24시간으로 표기
            var picker = TimePickerDialog(this, listener, hour, minute, false)

            picker.show()
        } 
        
    }
}

 

[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main_layout"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="기본 dialog" />

    <Button
        android:id="@+id/btn2"
        android:text="custom dialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn3"
        android:text="DatePicker dialog(날짜 선택)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn4"
        android:text="TimePicker Dialog (시간선택)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


 

[activity_dialog.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:orientation="vertical">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="20"
            android:inputType="textPersonName"
            android:text="ID" />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="20"
            android:inputType="textPersonName"
            android:text="PASSWORD" />
    </LinearLayout>
</LinearLayout>


 

[build.gradle(:app)]

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29

    defaultConfig {
        applicationId "edu.kotlin.study"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

 

Leave a Reply

error: Content is protected !!