안드로이드 다이얼로그는 대부분 Manifest에 정의된 Theme 속성에 의해서
그 모양이 제각각인데 타이틀바를 없애고 깔끔한 모습으로 Dialog를 만들고 싶다면
두 가지 속성을 추가하는 것으로 Theme 속성을 무시할 수 있습니다.
대부분 타이틀바는 다이얼로그 창의 제목을 넣어주는데 모양 자체가
어떻게 보면 굉장히 없어보이기 때문에 (안드로이드 기본 버튼 느낌) 디자인면에서
타이틀바를 제거하고 사용하는 것이 일반적입니다.
먼저 기본적으로 안드로이드에서 CustomDialog를 생성하는 방법은 다음과 같습니다.
물론 CustomDialog를 구현해 놓았다는 전제하에 설명하겠습니다.
CustomDialog dialog = new CustomDialog(context);
dialog.show();
이렇게 생성하면 물론 Theme속성에서 NotitleBar 속성이 추가되어 있다면
깔끔하게 다이얼로그창만 생성되겠지만 그렇지 않은 경우에는 타이틀바가
함께 붙어 생성되기 때문에 보기에 좋지 않습니다.
타이틀바를 제거하기 위한 속성은 다음과 같이 추가합니다.
CustomDialog dialog = new CustomDialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.show();
위와 같이 작성할 경우 다이얼로그에 타이틀바가 없이 생성할 수 있습니다.
자 이제 두 번째로 다이얼로그의 background를 디자인하여 사용하는 경우에는
다이얼로그의 기본적인 배경이 문제가 됩니다.
모서리가 둥근 형태의 배경을 적용했지만 하얀색의 바탕이 함께 생성되게 됩니다.
즉 이 하얀색 배경을 제거해주어야 원래 목적인
모서리가 둥근 형태의 다이얼로그를 생성할 수 있습니다.
CustomDialog dialog = new CustomDialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
다이얼로그의 배경을 TRANSPARENT옵션을 주어 투명화 시키면 다음과 같이
하얀색 배경이 투명이 되면서 모서리가 둥근 형태의 다이얼로그만 생성이 됩니다.
여기까지 하면 디자인적으로 원하는 다이얼로그를 생성할 수 있습니다.
마지막으로 다이얼로그에서 많이 추가하는 옵션이 있는데 배경 터치를 막아주는 옵션입니다.
다이얼로그가 띄워져 있는 경우 배경을 터치하면 dismiss가 호출이 되어
열려있는 다이얼로그가 화면상에서 사라집니다.
이러한 배경 터치는 사용자가 다이얼로그를 종료하기 위한 행위이기도 하나
만약 정보를 입력하거나 하는 등의 다이얼로그에서 사용자의 실수로
배경이 터치되었을 때 화면상에서 다이얼로그가 사라진다면 정말 난감할 것입니다.
이런 경우를 막기 위해 다이얼로그내에 창을 닫는 버튼을 배치하고
배경 터치자체를 막아버리는 구조를 많이 사용하게 됩니다.
CustomDialog dialog = new CustomDialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setCancelable(false);
dialog.show();
위와 같이 setCancelable 옵션에 false를 주어 생성하면 배경 터치를 하더라도
다이얼로그가 닫히지 않게 됩니다.
대부분 프로젝트를 진행하며 다이얼로그를 생성할 때에는
저는 저렇게 3가지 옵션을 가장 많이 사용합니다.
댓글