이어지는 글
다이얼로그 생성하기           
AlertDialog 생성하기       
ProgressDialog 생성하기   

커스텀 다이얼로그 만들기  
◀ 현재 위치

읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


안드로이드의 다이얼로그에 대한 내용입니다.


커스텀 다이얼로그 생성




기존의 다이얼로그는 너무 밋밋한 감이 없지않아 있지요?
만약 기존의 것이 아닌 커스텀 다이얼로그를 사용하고 싶다면, 레이아웃과 위젯 엘리먼트를 이용하여 만들면 됩니다.

우선 레이아웃을 정의한 뒤 root 뷰객체, 또는 레이아웃 리소스 ID를 setContentView() 메소드에 전달합니다.





우선 레이아웃 XML 을 정의하고,





를 소스에서 사용하면 되겠습니다.

다이얼로그 클래스를 사용해서 만들어진 다이얼로그는 타이틀을 가져야 합니다. 만약 setTitle() 메소드를 호출하지 않았다면 빈 상태로 보여집니다.

따라서 타이틀을 사용하지 않으려면 AlertDialog 클래스를 사용해서 커스텀 다이얼로그를 만들어야 하는데요, AlertDialog 는 AlertDialog.Builder 클래스를 사용하기 때문에 setContentView() 메소드 대신에 setView() 메소드를 사용합니다. 이 메소드는 뷰 객체를 받습니다.
즉, XML 레이아웃의 루트 뷰 객체를 전개 (infalte) 하는것이 필요합니다.

XML 레이아웃을 전개하기 위하여 getLayoutInfalter(), 또는 getSystemService() 를 호출하여 LayoutInflater 를 얻는것이 우선입니다.



그런 뒤 inflater(int, ViewGroup) 메소드를 호출합니다.




인자로 가지는 첫번째 인자는 레이아웃 리소스 ID이고, 두번째는 루트 뷰의 ID 입니다. 레이아웃에서 뷰 객체를 찾기 위해 전개된 레이아웃을 사용하고, 그런 뒤에 AlertDialog.Builder 를 인스턴스화 합니다. 다음에 setView() 메소드를 써서 다이얼로그에 전개된 레이아웃을 지정하면 되는 구조입니다.




마지막으로 커스텀 다이얼로그에서 AlertDialog 를 쓰는것의 장점은 버튼, 타이틀, 아이콘, 리스트 등의 AlertDialog 의 기능을 쓰는것이 가능하다는 점입니다.



 
다이얼 로그에 대한 내용이 마무리 되었네요;;;
감사합니다.

다음 주제는 드디어 UI 이벤트 처리에 대한 부분을 해볼까 합니다.
잘 될지 걱정입니다 ㅎㅎㅎ



관련글



저작자 표시 비영리 변경 금지
  1. 최자애 address modify / delete reply

    이거 안되는데?

    1. Reply: BlogIcon 티몰스 address modify / delete reply

      어떤게 안된다는 말씀이신지?

  2. BlogIcon 류노 address modify / delete reply

    ProgressDialog 는 커스텀으로 안되나요?
    예를들면 프로그레스 다이얼로그의 회전하는 그것만 화면 가운데 띄우고 싶거든요.

    그렇게 하려면 어떻게해야할까요?

    1. Reply: BlogIcon 티몰스 address modify / delete reply

      글쎄요~
      기본적인 프로그레스 다이얼로그가 아마 타이틀이 있었던것으로 기억하는데.... 없어도 되는지는 모르겠네요.

      우선 커스텀은 가능합니다~

  3. address modify / delete reply

    커스텀 다이얼 로그를 메인에 시작하면서 띄우고 메인이 나니까 닫히지가 않네요

    닫는건 어떻게 하죠.

    1. Reply: BlogIcon 티몰스 address modify / delete reply

      찾아보니,

      dismissDialog(다이얼로그 객체);
      메소드가 존재하는군요.

      이 메소드를 적절한 위치에 적용하시면 닫혀집니다^^

  4. address modify / delete reply

    다이얼 로그 객체가 머죠??ㅠㅠ

    1. Reply: BlogIcon 티몰스 address modify / delete reply

      음...
      좀 어색한 답변이 될 수도 있겠지만,

      객체지향 언어에서
      어떠한 기능을 하려면 객체에게 메소드로 일을 지시를 해야겠지요 ^^

      예를들면 이런식이 되겠습니다.

      Dialog dialog = new Dialog(mContext);
      dismissDialog(dialog);

      도움 되시길...

  5. 퐁듀 address modify / delete reply

    아래 예제 : alertDialog 클래스를 사용해서 커스텀 다이얼로그를 만드는 소스 및 xml 파일을 그대로 옮겨 적었는데요, 위의 분과 마찬가지로 저도 커스텀 다이얼로그 창을 닫고 싶습니다.
    지금 빌드환경이 조성이 안되는 곳에서 급히 알아야할 정보인지라, 빌드를 직접 돌려보지 못하고 질문을 드리게 되네요.

    위의 예제에서
    private AlertDialog alertDialog;
    alertDialg = builder.create();
    (어떤 버튼 클릭시)
    dismissDialog(alertDialog);
    와 같이 해주려고 하는데 정상적으로 동작할까요?

  6. 퐁듀 address modify / delete reply

    한가지 더 문의드릴께요'ㅡ'!
    다이어로그 창 생성하는 것에 대하여 올려놓으신 블로그를 보니
    dismissDialog(int id)가 들어가야 한다고 나오네요,
    혹시 dismissDialog(Dialog object)가 따로 있는 것인가요,

    혹은 dismissDialog(int id)가 되어야 하는 것이라면,
    위의 예제에서는 alertDialog를 생성해줄 때 id를 따로 인자로 주지 않았는데,
    어떻게 인자를 넣어줄 수 있을까요? setId와 같은 함수라도 있는 것인지..

    빌드를 해볼 수 있다면 좋을텐데.. 도저히 지금은 상황이 안되네요..