2011년 12월 27일 화요일

android ICS 해상도, density에 따른 UI 변화

해상도 중 짧은 쪽이 600pixel 이상 일때 emulator의 화면입니다.




그리고 600pixel 미만일 때 emulator의 화면입니다.



동일한 AVD에서 해상도만 1024 x 600에서 800 x 480으로 변경한 것입니다.

해상도의 짧은 쪽이 600이상 일 때는 tablet의 UI를 보여 주고 600 미만 일 때는 phone의 UI를 보여 줍니다.

그리고 짧은 쪽이 600이상이 되면 자동으로 status bar가 하단에 위치 하고 screen buttons(Navigation Bar로 내부적으로 표현함)이 포함됩니다.

phone의 UI는 기본이 portrait이고 tablet의 UI는 landscape입니다.

600미만인 android에 landscape를 default로 주고 Screen Buttons(Navigation Bar)를 주면 제대로 그려지지 않습니다.

PhoneWindowManager.java를 보면 resolution, dpi를 가지고 판단하는 코드가 있습니다.


 870         // Determine whether the status bar can hide based on the size
 871         // of the screen.  We assume sizes > 600dp are tablets where we
 872         // will use the system bar.
 873         int shortSizeDp = shortSize
 874                 * DisplayMetrics.DENSITY_DEFAULT
 875                 / DisplayMetrics.DENSITY_DEVICE;
 876         mStatusBarCanHide = shortSizeDp < 600;
 877         mStatusBarHeight = mContext.getResources().getDimensionPixelSize(
 878                 mStatusBarCanHide
 879                 ? com.android.internal.R.dimen.status_bar_height
 880                 : com.android.internal.R.dimen.system_bar_height);
 881


결론은 600미만의 device를 만드실 때는 반드시 portrait 타입에 LCD를 사용하시기 바랍니다.

그리고 odroid-7으로 테스트 한 것인데 ro.sf.lcd_density=120으로 주니 tablet UI로 동작은 합니다.





댓글 쓰기