그리고 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로 동작은 합니다.
댓글 1개:
저는 density를 120으로 변경하니 SystemUI 에러가 발생하면서 상태바를 그리지 못하네요. 혹시 density 변경외에 다른 작업을 해 주신것이 있나요? 4.0.3 버전입니다.
댓글 쓰기