본문 바로가기

안드로이드/부스트코스 안드로이드 기본편

[안드로이드 기본] 기본 다이얼로그 띄우기

다이얼로그는 앱 개발을 하면서 정말 많이 사용한다.

지금은 비록 기본 다이얼로그를 띄우는 작업이지만, 다이얼로그 자체를 커스터마이징해 원하는 디자인으로 만들고, 버튼의 갯수도 지정도 가능하게 만들 수 있다. 간단한 정보를 몇초간 띄워주는 토스트(Toast)와는 다르기에 알아두면 도움이 될것이다.

기본적으로 다이얼로그는 타이틀과 메시지 그리고 버튼으로 구성된다.

 

다이얼로그의 종류는 AlertDialog, DatePickerDialog, PreogressDialog, TimePickerDialog 등이 있는데 아래 예제에서는 AlertDialog를 가지고 구현할것이다.

 

AlertDialog 클래스의 메소드는 아래와 같이 정리할 수 있다.

AlertDialog create()
AlertDialog를 생성한다.
AlertDialog.Builder setCancelable(boolean cancelable)
뒤로가기(Back) 버튼으로 대화상자를 닫을 수 있는지의 여부
기본값 : true
AlertDialog.Builder setIcon(Drawable icon)
아이콘을 타이틀에 설정한다.
AlertDialog.Builder setMessage(int messageId)
메시지를 문자열로 설정한다.
AlertDialog.Builder setNegativeButtion(CharSequence text, DialogInterface.OnClickListener listener)
부정(negative) 버튼이 눌렸을 때 호출될 리스너를 설정한다.
AlertDialog.Builder setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener)
중립(neutral) 버튼이 눌렸을 때 호출될 리스너를 설정한다.
AlertDialog.Builder setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
긍정(positive) 버튼이 눌렸을 때 호출될 리스너를 설정한다.
AlertDialog show()
현재 빌더에 설정된 옵션으로 AlertDialog를 생성하고 이를 보여준다.

 

일단, 버튼을 클릭하면 기본 다이얼로그가 띄어지는 코드를 구현해보자.

 

[activity_main.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="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

[MainActivity.kt]

package com.practice.demodialog

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), View.OnClickListener {

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

        button1.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        AlertDialog.Builder(this)
            .setIcon(R.drawable.ic_launcher_foreground)
            .setTitle(getString(R.string.title))
            .setMessage(getString(R.string.message))
            .setNeutralButton(getString(R.string.exit), null)
            .show()
    }
}

액티비티에 View.OnClickListener를 implement하여 onClick이라는 메소드를 오버라이드했다.

구현부분에 AlertDialog라는 클래스를 사용했다. 그리고 위에 정리된 메소드들을 사용하여 다이얼로그를 구성하였다.

 

여기서 AlertDialog빌더패턴을 이용하여 만들어진것을 확인할 수 있었다.

AlertDialog.Builder(context)를 통해서 만들어진 객체를 각 메소드들이 리턴하고 있는 형태이다.

그렇기에 저렇게 연속적으로 고리형태로 사용할 수 있는 것이다.

 

위의 코드는 아래와 같이 사용할 수 있지만 위와 같은 빌더패턴으로 하면 가독성을 더 좋게 할 수 있는것 같다.

val dialog = AlertDialog.Builder(this)
dialog.setIcon(R.drawable.ic_launcher_foreground)
dialog.setTitle(getString(R.string.title))
dialog.setMessage(getString(R.string.message))
dialog.show()

 

기본 다이얼로그 띄우기 전체 코드 주소