안드로이드 화면 가로/세로 관련하여 가로 모드일 경우 특정 화면에서는 가로로, 세로 모드일 경우에는 특정 화면에서 세로 화면으로의 기능이 필요해서 개발을 하다 보니 가로세로의 정의가 폰과 탭이 달라서 폰과 탭을 구분지을 필요가 있어 조사를 해봤다.
테스트 예제 소스
private int getScreenOrientationPhone(int orientation) { switch (orientation) { case Surface.ROTATION_0: return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; case Surface.ROTATION_90: return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; case Surface.ROTATION_180: return ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; case Surface.ROTATION_270: return ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; } return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } private int getScreenOrientationTab(int orientation) { switch (orientation) { case Surface.ROTATION_0: return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; case Surface.ROTATION_90: return ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; case Surface.ROTATION_180: return ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; case Surface.ROTATION_270: return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } private int getScreenOrientation(int orientation) { if (isTablet()) { return getScreenOrientationTab(orientation); } else { return getScreenOrientationPhone(orientation); } } private boolean isTablet() { Configuration config = getContext().getResources().getConfiguration(); return ((config.screenLayout & Configuration.SCREENLAYOUT_SIZE_XLARGE) == Configuration.SCREENLAYOUT_SIZE_XLARGE); }
출처 : http://beom3x2.iptime.org/tc/Android/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%BD%94%EB%93%9C%EC%83%81%EC%97%90%EC%84%9C-%EC%8A%A4%ED%81%AC%EB%A6%B0-%EC%82%AC%EC%9D%B4%EC%A6%88-%EA%B5%AC%EB%B6%84%ED%95%98%EA%B8%B0-%ED%8F%B0-%ED%83%80%EB%B8%94%EB%A6%BF-%EA%B5%AC%EB%B6%84?category=1
다음과같은코드를이용하여코드상에서폰과태블릿을구분할수있다.
(코드상에서폰인지태블릿인지를가져올수있다.)
int screenSizeType = (/*context.*/getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK);
if(screenSizeType == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
// 매우 큰 화면 사이즈, 10인치 이상 태블릿 : 갤럭시탭 10.1, 갤럭시노트10.1, 기타 등등.
}
else if(screenSizeType == Configuration.SCREENLAYOUT_SIZE_LARGE) {
// 큰 화면 사이즈, 약 7인치 태블릿 : 넥서스7, 갤탭, 기타 등등.;
}
else/* if(screenSizeType == Configuration.SCREENLAYOUT_SIZE_NORMAL ||
screenSizeType == Configuration.SCREENLAYOUT_SIZE_SMALL) */ {
// 태블릿이아니다(폰) : 갤럭시노트, 갤럭시 S, 베가, 옵티머스시리즈기타폰들.
}
이에대한 자세한 설명은 Configuration 에 대해서 설명한 Android Developer 사이트에서 확인할 수 있다.
대략 요약하자면,context에서 가져온 Configuration 의 인스턴스 내부의 screenLayout 필드 값을 SCREENLAYOUT_SIZE_MASK 으로 인코딩하여 화면 사이즈 종류를 가져올 수 있다.
Android Developer 페이지에 나와있는 설명을 대충 요약하면 이렇다.
SCREENLAYOUT_SIZE_SMALL
설명 : 소형 화면. 저밀도(low-density) QVGA 와 비슷한 크기. - 값 싸고 화면 작은 저가 폰들이 이 범주에 속하
는 것 같다.
레이아웃 사이즈 : 최소, 약 320 x 426 dp.
예 : low-density QGVA, high-density VGA.
SCREENLAYOUT_SIZE_NORMAL
설명 : 일반 화면, medium-density HVGA 와 비슷한 크기. - 일반적인 폰. 갤럭시 노트 포함.
레이아웃 사이즈 : 최소, 약 320x470 dp.
예 : low-density WQVGA , medium-density HVGA , high-density WVGA.
SCREENLAYOUT_SIZE_LARGE
설명 : 대형 화면, medium-density VGA 와 비슷한 크기. - 넥서스7과 갤탭등.
레이아웃 사이즈 : 최소, 약 480x640 dp.
예 : medium-density VGA, medium-density WVGA
SCREENLAYOUT_SIZE_XLARGE
설명 : 초(?)대형 화면, medium-density VGA 와 비슷한 크기 - 현재까지는 갤탭 10.1 갤노트 10.1, 기타 10인 근처의 타블릿등등.
레이아웃 사이즈 : 약 720x960 dp 이상.
API 9 부터추가. (진저브레드부터사용할수있다.)
'Programs > Android' 카테고리의 다른 글
Android Native Screen capture application using the Framebuffer (0) | 2013.07.17 |
---|---|
Android - GridLayout 사용하기 (0) | 2013.07.15 |
onConfigurationChanged() 호출이 안되는 문제 (0) | 2013.06.03 |
영문 키패드 나오게 하는 방법 (0) | 2013.03.19 |
Dialog 에서 키보드 띄울 때 키보드가 다이얼로그 가리는 경우 (1) | 2013.03.11 |