작업 일지

[Android] Screen Size로 폰과 태플릿 구분하기

O_Gyong 2022. 11. 23.

목차

홈 트레이닝 서비스 프로젝트 중에 폰은 세로모드, 태블릿은 가로모드로 고정을 해달라는 요청을 받았다.

현재 사용 중인 기기가 폰인지 태블릿인지를 구하고 가로 또는 세로모드를 고정시켜야겠다고 생각했다.

 

기기의 타입을 확인하는 방법은 안드로이드의 Configuration에서 제공하는 screenLayout을 사용하면 된다.

 

우선 screenLayout은 화면 전체 레이아웃에 대한 비트 마스크라고 한다.

(비트 마스크 : 비트를 마스킹하는 기술로 비트 연산을 통해 정수의 이진 비트를 처리하는 작업)

 

Configuration에는 ScreenLayout에 대한 정적 변수들이 있다. 그중 SCREENLAYOUT_SIZE_MASK는 screenLayout의 크기를 인코딩하는 비트라고 한다. 

• SCREENLAYOUT_SIZE_SMALL
화면이 최소 약 320x426dp 단위임을 나타내는 값
Ex) 저해상도 및 초소형 기기

• SCREENLAYOUT_SIZE_NORMAL
화면이 최소 약 320x470dp 단위임을 나타내는 값
Ex) 일반적인 기기

• SCREENLAYOUT_SIZE_LARGE
화면이 최소 약 480X640dp 단위임을 나타내는 값
Ex) 7인치를 넘어가는 기기

• SCREENLAYOUT_SIZE_XLARGE
화면이 최소 약 720x960dp 단위임을 나타내는 값
Ex) 10인치를 넘어가는 기기

Configuration의 ScreenLayout에 대한 정적 변수 중 크기를 알려주는 값

참고 자료

screenLayout과 and 비트 연산을 통해 사용 중인 기기의 타입 값을(정적 변수) 얻을 수 있다.

val tvType = findViewById<TextView>(R.id.tv_type)

val screenSizeType = resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK

when (screenSizeType) {
    Configuration.SCREENLAYOUT_SIZE_SMALL -> {
        tvType.text = getString(R.string.small)
    }
    Configuration.SCREENLAYOUT_SIZE_NORMAL -> {
        tvType.text = getString(R.string.normal)
    }
    Configuration.SCREENLAYOUT_SIZE_LARGE -> {
        tvType.text = getString(R.string.large)
    }
    Configuration.SCREENLAYOUT_SIZE_XLARGE -> {
        tvType.text = getString(R.string.x_large)
    }
    else -> {
        tvType.text = getString(R.string.unknown)
    }
}

[Android] Screen Size로 폰과 태플릿 구분하기[Android] Screen Size로 폰과 태플릿 구분하기[Android] Screen Size로 폰과 태플릿 구분하기
(왼쪽)갤럭시 z 플립, (가운데)갤럭시 z 폴드-접힘, (오른쪽)갤럭시 z 폴드-펼힘

 

전체 코드

댓글