본문 바로가기

안드로이드

안드로이드 : 대화 상자

대화 상자 - AlertDialog

문자열 메시지 뿐 아니라 타이틀 바나 아이콘 출력이 가능하고 사용자의 입력도 받을 수 있습니다.

생성은 생성자를 이용하지 않고 Builder 라는 내부 클래스를 이용

Builder 에 Context 를 대입해서 생성을 하고 setMessage, SetTiltle, setIcon 등의 메소드로 대화상자를 설정 하고 show 호출 하면 출력

 

대화 상자에 버튼을 추가할 수 있습니다.

setPositiveButton, setNeutralButton, setNegativeButton 메소드를 이용해서 추가

 

매개 변수는 첫번째는 버튼의 타이틀이고 두번째는 버튼을 눌렀을 때 이벤트 처리를 위한 DialogInterface.OnClickListener 입니다.

기본적으로 버튼을 누르면 대화 상자는 닫힙니다.

 

대화상자는 back 버튼을 누르면 닫히도록 되어있습니다.

이 기능을 없애고자 할 때는 setCancelable(false) 로 설정하면 됩니다.

import android.content.Context
import android.media.MediaPlayer
import android.media.Ringtone
import android.media.RingtoneManager
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.VibrationEffect
import android.os.Vibrator
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn1.setOnClickListener(View.OnClickListener {
            // 진동 객체를 생성
            val vib = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
            // 누가 버전 이후
            if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
                vib.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE))
            } else {
                vib.vibrate(1000)
            }
        })

        btn2.setOnClickListener(View.OnClickListener {
            // 시스템 사운드 재생
            val notification: Uri = RingtoneManager.getDefaultUri(
                RingtoneManager.TYPE_ALARM)
            val ringtone = RingtoneManager.getRingtone(this, notification)
            ringtone.play()
        })

        btn3.setOnClickListener(View.OnClickListener {
            val player:MediaPlayer
                    = MediaPlayer.create(this, R.raw.buttoneffect)
            player.start()
        })
        btn4.setOnClickListener(View.OnClickListener {
            AlertDialog.Builder(this)
                .setTitle("대화 상자")
                .setMessage("대화 상자에 메시지 출력")
                .setIcon(R.drawable.ic_launcher_foreground)
                .setPositiveButton("토스트 출력", {dialog, whichButton ->
                    Toast.makeText(
                        this@MainActivity, "작업종료",
                        Toast.LENGTH_LONG).show()
                })
                .setNegativeButton("닫기", null)
                .show()
        })

    }
}