안드로이드 화면 가로/세로 관련하여 가로 모드일 경우 특정 화면에서는 가로로, 세로 모드일 경우에는 특정 화면에서 세로 화면으로의 기능이 필요해서 개발을 하다 보니 가로세로의 정의가 폰과 탭이 달라서 폰과 탭을 구분지을 필요가 있어 조사를 해봤다.

테스트 예제 소스


	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 부터추가. (진저브레드부터사용할있다.)

 

 

Posted by outliers
,