본문 바로가기

개발/안드로이드 소스분석

[안드로이드]apiDemos파해치기 2. App - customDialog

2011/06/16 - [안드로이드] - [안드로이드]apiDemos파해치기 1. App - Activity
Activity는 화면의 기본단위 정도로 생각하시면 된다고 했는데요.
화면을 구성하는 데에 있어서 Activity이외에 꼭 필요한 것이 View입니다.

customDialog에서는 이 Activity에 textView만을 띄워 dialog로 사용하게 됩니다.
dialog라기보단 어떻게보면 전체화면으로 이용하지 않는 Activity라고 할 수 있는데요.
소스를 보자면

CustomDailogActivity.class - onCreate


1. App - Activity에서 말씀드렸던 setContentView를 사용해 custom_dialog_activity layout을 화면에 넣어주엇구요.

custom_dialog_activity.xml


TextView만있고 다른것은 없는 textView입니다.
그런데 실행되는 화면을 보시면 


layout_width와 layout_height가 match_parent로

되어있음에도 wrap_content인것처럼 화면전체를 차지하지 않고 사용된 영역만 background가 지정되어있는데요. 
























그 이유는  AndroidManifest.xml 파일에서 확인하실 수 있습니다.


참고로 AndroidManifest.xml파일은 apiDemos 앱의 관리자 같은 역할을 하는 환경설정파일로 보시면 되고
위에 보시면 android:theme="@style/Theme.CustomDialog" 라는 항목을 확인할 수 있습니다.
/res/values/styles.xml 파일을 열어보시면 Theme.CustomDialog를 찾으실 수 있습니다.

부모로서 안드로이드의 Dialog를 사용하고있고
windowBackground를 보시면 drawable의 filled_box를 값으로 사용하고있습니다.

filled_box.xml


여담이지만 apiDemos를 보면 항상 느끼는건데 안드로이드 책 한권정도는 본 후에야 어느정도 이해할 수 있을정도로 조금은 복잡한 느낌도 있고 왜이렇게할까 싶은 느낌도 듭니다.

shape는 자신이 직접 컨텐츠의 모양을 설정할때 사용하는데요. Web에서 사용하는 css정도로 생각해주시면 되겠네요. 져같은 경우는 기기별로 다른 EditText의 모양때문에 디자인한 것이 틀어지는 것을 방지하기위해 주로 사용했습니다.

filled_box.xml파일의 내용을 간단하게 줄이자면. "#f0600000" 으로 화면을 체우고 3dp만큼의 라운딩을 사용하고 10dp씩 여백을 두며 3dp의 크기에 "#ffff8080"으로 화면을 그리게 하라 라는 의미입니다.
참고로 shape에서는 위와같이 단색으로 체우기도 하지만 gradation을 사용할 수도 있습니다.

갤럭시 탭과 같은 사이즈가 다를경우 특정이미지를 ImageView를 이용해서 사이즈를 강제로 늘려도 상관없지만 그렇게 되면 아무래도 조금씩이지만 부하를 일으키게 되지 않을까싶네요.
참고로 ImageView의 fitXY로 하시게되면 ImageView 에서 지정한 width,height에 이미지 사이즈에 맞추게 되지만 이미지가 틀어지게되니 별로 추천하고 싶진 않네요.