Mobile/Android(Java)

[Android/java] AlertDialog.Builder를 통한 Custom Dialog 만들기

개발왕 금골드 2020. 3. 14. 18:41
반응형

안녕하세요 골드입니다.

오늘은 Custom Dialog 만드는 법에 대해서 글을 쓰겠습니다.

 

Dialog는 대화상자로 여러분이 잘 아는 바로 그 대화상자입니다.

출처 : 안드로이드 공식 문서

어플리케이션을 만든다면 정말 안 쓸 수가 없습니다. 그만큼 많이 사용하고

효율적인 부분이 있습니다.

 

그럼 만들어보겠습니다.

 

 

1. Dialog를 정의하는 java class 만들기

먼저 Dialog를 정의하는 class 파일을 만들겠습니다.

DialogFragment를 상속합니다.

DialogFragment 클래스는 Dialog 객체의 메서드를 호출하는 대신 대화상자를 만들고 외형을 관리하는 데 필요한 모든 컨트롤을 제공합니다. 올바른 이벤트 처리가 가능하며, UI 재사용이 가능합니다.

 

간단하게 MyDialog.class를 작성하였습니다.

따로 테마 설정을 하지 않았기 때문에 기본 테마가 적용됩니다.

 

R.stirng.xxxx 는 res/values/string.xml 파일에 제가 추가한 것입니다.

string.xml에 추가하면 나중에 관리가 용이합니다.

 

AlertDialog.Builder를 사용하면 다양한 Dialog를 만들 수 있습니다.

사진과 같이 . 연산자를 사용해서 다양한 기능을 추가할 수 있습니다.

 

 AlertDialog는 생성자가 protected로 숨겨져 있기 때문에 직접 생성할 수 없습니다.

그렇기 때문에 내부 클래스인 Builder를 통해 생성하는 것입니다.

AlertDialog.Builder를 먼저 생성하고, 객체의 메소드들을 호출해서 AlertDialog 객체 생성 전에 필요한 속성을 지정하는 것입니다.

 또한, AlertDialog는 메신저, 아이콘 및 각종 버튼 등의 적용 옵션이 많아서 생성자를 통해서 하나씩 지정하게 되면 상당히 번거롭기 때문에, 편의성을 위해 별도의 Builder 객체를 사용하는 것입니다.

 AlertDialog.Builder(Context context) 에서

Context를 전달하는데 이 때 AlertDialog를 생성하는 부모 액티비티를 전달합니다.

(그래서 getActivity()를 사용)

 Builder 객체에 있는 다양한 메소드(setMessage(), setTitle() 등등)을 통해 AlertDialog의 여러 가지 설정을 초기화 할 수 있습니다.

 

 

저는 positive버튼과 negative버튼 두 가지를 추가했지만, 앞서 말한대로 세 개까지 가능합니다.

중립버튼을 추가할 수 있습니다. 중립버튼은 '나중에' 같은 기능을 위한 버튼입니다.

버튼은 종류별로 한가지씩만 추가할 수 있습니다.

 

 

 

3. MainActivity에 추가

메인 액티비티에 버튼을 하나 추가해서 버튼을 누르면 대화상자가 나타나도록 구현했습니다.

show()를 사용하여 dialog를 띄울 수 있습니다. tag는 fragment transaction에 commit하기 위한 문자열 값입니다.

관리가 목적이라는 뜻입니다.

 

그럼 가상 머신으로 실행해보겠습니다.

 

가운데 버튼이 있는데 가려졌네요. 버튼을 누르면 저렇게 대화상자가 나오게 됩니다.

 

여기까지 골드였습니다.

감사합니다.

 

출처 : https://developer.android.com/guide/topics/ui/dialogs?hl=ko

 

대화상자  |  Android 개발자  |  Android Developers

대화상자는 사용자에게 결정을 내리거나 추가 정보를 입력하라는 프롬프트를 표시하는 작은 창입니다. 대화상자는 화면을 가득 채우지 않으며 보통은 사용자가 다음으로 계속 진행하기 전에 조치를 취해야 하는 모달 이벤트에 사용됩니다. 대화상자 디자인 언어 권장 사항을 비롯한 여러 가지 대화상자 디자인 방법에 관련된 정보는 대화상자 디자인 가이드를 읽어보세요. Dialog 클래스가 대화상자의 기본 클래스이지만, Dialog를 직접 인스턴스화하는 것은 삼가야 합니다.

developer.android.com

자세한 정보는 여기서 확인할 수 있습니다.

반응형