2012년 6월 30일 토요일

액티비티 팝업으로 띄우기(테마 적용)

이번 프로젝트를 하면서 팝업창이 일반 Alert Dialog가 아닌, 직접 UI를 구현한 형식의 Dialog창이여야 했습니다.
AlertDialog.Builder 클래스를 사용해서 View를 넣어주는 방식도 있었지만, 문제는 Dialog창에서 프로그램 로직을 돌려야 할 경우 어떻게 처리해야 하는가에 대한 부분이였습니다.

예를 든다면 팝업창이 뜨면서 서버로부터 데이터를 받아와서 팝업창의 내용을 뿌려야 한다던가 하는 식의 처리였죠.

웹에서 자료를 찾다 보니 딱 제가 원하는 방식이 있어서 정리해 봅니다.

먼저 팝업으로 사용할 Activity를 하나 만들어야 합니다.
그리고 AndroidMenifest.xml에서 해당 클래스를 Activity로서 등록하는 Attribute에android:theme="@android:style/Theme.Dialog" 라는 속성을 추가해 줍니다.
  1. <ACTIVITY  
  2.     android:name="Activity 클래스 이름"  
  3.     android:theme="@android:style/Theme.Dialog"></ACTIVITY>  

그런 다음 팝업창으로 동작할 해당 Activity 클래스의 소스파일에 onApplyThemeResource 라는 메소드를 재정의 해 줍니다.
  1. @Override  
  2. protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first)  
  3. {  
  4.     super.onApplyThemeResource(theme, resid, first);  
  5.           
  6.     // no background panel is shown  
  7.     theme.applyStyle(android.R.style.Theme_Panel, true);  
  8. }  

이제 이 부모창에서 이 Activity를 Intent를 통해서 startAcvity() 메소드로 호출하면 팝업창으로서 동작합니다. 물론 페이지의 디자인이 화면의 전체 사이즈보다 작아야 하겠죠.

startActivityForResult() 메소드를 활용하면 팝업창으로 부터의 결과를 부보창이 받아볼 수 도 있게 됩니다.


출처 : http://hoyanet.pe.kr/544

댓글 없음:

댓글 쓰기