이 분의 tistory를 찾은 지금의 나로서는 금광을 찾은 느낌이다.

알레폰드 http://202psj.tistory.com/

=========================================================================================================================

How Android Supports Multiple Screens

(원문펌 http://overoid.tistory.com/9)

안드로이드에서는 런타임시에 아래 3 가지 방식 중 하나로 다양한 화면을 지원합니다 . 아주 중요한 내용입니다 .


i) Pre -Scaling ( 보통 bitmap 이미지 처리시에)

Pre -Scaling 은 로딩시점에 크기를 조절합니다 . CPU 에 이득이 있다고 알려져 있습니다. Pre -Scaling 은 폰의 Density 를 기준으로 동일한 dpi 디렉토리에 지정된 리소스를 로딩하며 이때는아무런 크기 변환없이 보여줍니다 . 즉 폰이 hdpi density 라면 res/drawable-hdpi 디랙토리 하위의 리소스를 먼저 찾아서 있다면 아무런 크기 변환없이 그대로 보여주게 됩니다. 만일 매칭되는 리소스가 없다면 디폴트 리소스 (basline) 를 로딩하고 로딩 시에 적합한 density로 크기 변환을 합니다 . 예를들어 res/drawable-mdpi/ 에 100*100 아이콘만 존재한다고 할 때 만일 폰의 사양이 hdpi 라면 안드로이드는 drawable-mdpi 하위의 아이콘을 읽을때 자동으로 크기를 확대해서 150 * 150 bitmap 을 만듭니다. 반대로 drawable-hdpi/ 에 150*150 아이콘만 존재할 때 mdpi 폰에서 읽으면 자동으로 100*100 아이콘으로 크기를 변환합니다 . drawable-hdpi 및 drawable- mdpi에 모두 이미지가 존재한다면 별도의 스케일 변환 작업이 필요없으니 좀 더 성능에 유리 합니다.

ii) Auto-scaling (pixel dimensions and coordinates)

Auto-scaling 은 그리는 시점에 크기를 조절합니다 . 메모리에 이득이 있다고 알려져 있습니다 . 주로 Pixel 좌표, Pixel Dimesion 값, Application 에서 사용된 Pixel 수식 등에 적용되며, 리소스가 아닌 웹이나 SD카드에서 Bitmap 데이터를 가져왔을 때도 적용됩니다. 쉽게 얘기하면 App에서 ( 10,10) 에서 (100,100) 좌표로 4각형을 그리도록 구현했다면 High -Density(240dpi) 화면을 가진 Device 에서는 그리는 시점에 자동으로 스케일을 변환해서 (15,15) (150,150) 좌표에 사각형을 그리게 된다 .

ii) Compatibility Mode (호환모드)

Large 스크린을 지원 안하는 앱을 Large 스크린에서 실행하면 검은 배경에 원래 크기만큼만 표시합니다. 보기에는 별로입니다 . 앱이 싼티 납니다. 아 .. 여전히 복잡하고 어렵군요 . 원문 보시면 좀 더 상세하지만 복잡한 내용들로 가득 차 있습니다. 중요한 점은 안드로이드가 여러 화면사이즈를 지원하기 위해서 런타임시에 자동으로 크기를 바꾼다는 것을 기억하십시요 .

제가 사용하는 기본 레이아웃 디자인 룰은 다음과 같습니다 .

i) 레이아웃 디자인시에는 HVGA 기본 스크린 사이즈를 중심으로 DIP 단위만을 사용해서 디자인합니다. px과 dip가 1:1 이라서 화면 크기에 대응하여 사이즈 결정하기가 좋습니다. 320 * 480 화면 기준으로 들어갈 이미지나 UI 요소들 각각의 가로 사이즈를 px로 계산한 후 코딩시에는 그 값의 단위를 dip 로만 입력하 면 됩니다 .

ii) AbsoluteLayout 을 사용하지 않습니다. 즉 , 화면의 절대 좌표 보다는 상대 좌표를 사용해야 합니다. 이거 사용해서 디자인하면 ..나중에 감당 안됩니다 .


iii) Bitmap 은 HDPI 기준으로 만듭니다. 그래야 자동으로 크기가 조정 되더라도 보기에 좋습니다. 즉 HVGA 를 기준으로 계산했을 때 100 * 100 이미지가 필요하다면 HDPI 기준으로 크기의 1.5 배인 150 *150 크기로 실 이미지를 제작하시면 됩니다. 만일 여력이 된다면 hdpi 및 mdpi 기준으로 각각 만드는 것도 나쁘지는 않습니다. 위에서 언급했듯이 성능에 유리합니다.

iv) 각 장치별로 레이아웃 및 이미지를 모두 별도로 만들어서 세밀하게 조정할 수도 있지만 그런 경우 관리가 힘듭니다 . 가급적 레이아웃과 이미지를 적게 사용해서 통일된 UI를 구성하는 것이 좋습니다.

+ Recent posts