09-3 폰 크기의 호환성
논리적인 단위 알아보기
안드로이드 시스템은 기기의 크기를 ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi로 구분
여기서 dpi는 dots per inch의 줄임말로 1인치 안에 있는 도트의 개수를 의미함
안드로이드 기기의 크기 구분
크기 | 설명 |
ldpi | 저밀도 화면이며 ~120dpi |
mdpi | 중밀도 화면이며 ~160dpi |
hdpi | 고밀도 화면이며 ~240dpi |
xhdpi | 초고밀도 화면이며 ~320dpi |
xxhdpi | 초초고밀도 화면이며 ~480dpi |
xxxhdpi | 초초초고밀도 화면이며 ~640dpi |
안드로이드 시스템은 기기의 크기를 구분하여
콘텐츠의 크기를 늘리거나 줄여서 그에 맞게 나올 수 있도록 도움
→ 개발자가 콘텐츠의 크기를 지정할 때 논리적인 단위를 사용해야 함
물리적인 단위로 지정하면 시스템의 도움을 받을 수 없음
안드로이드에서 앱 개발할 때 크기 지정에 사용할 수 있는 단위
- dp(dip: density-independent pixels): 스크린의 물리적 밀도에 기반을 둔 단위
- sp(sip: scale-independent pixels): dp와 유사하며 글꼴 크기에 적용
- pt(points): 스크린 크기의 1/72을 1pt로 함
- px: 픽셀
- mm: 밀리미터
- in: 인치
안드로이드에서는 논리적인 단위인 dp와 sp로 크기 지정을 권함
dp는 일반 크기, sp는 글꼴 크기를 의미함
· px와 dp 단위 크기 지정 예
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HelloWorld"
android:textSize="12px" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HelloWorld"
android:textSize="12dp" />
실행 결과
같은 크기를 지정했는데
단위를 px로 설정한 뷰는 문자열이 너무 작게 나와 제대로 보이지 않음
단위를 dp로 설정하면 시스템에서 기기의 dpi를 보고 크기를 조정하여 출력하므로
문자열이 px 단위를 사용할 때보다 크게 출력됨
크기별 배율
크기 | 배율 |
ldpi | 0.75 |
mdpi | 1.0 |
hdpi | 1.5 |
xhdpi | 2.0 |
xxhdpi | 3.0 |
xxxhdpi | 4.0 |
화면 정보 가져오기
개발자가 직접 코드에서 조정하려면
기기의 크기 정보를 가져와야 함
API 30 이전 버전에서는 DisplayMetrics로 크기 정보를 가져옴
API 30 버전부터는 (deprecation), WindowMetrics를 이용해야 함
· 기기의 가로, 세로 크기 가져오기
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val windowMetrics: WindowMetrics = windowManager.currentWindowMetrics
binding.textView.text = "width : ${windowMetrics.bounds.width()},
height : ${windowMetrics.bounds.height()}"
} else {
val display = windowManager.defaultDisplay
val displayMetrics = DisplayMetrics()
display?.getRealMetrics(displayMetrics)
binding.textView.text = "width : ${displayMetrics.widthPixels},
height : ${displayMetrics.heightPixels}"
}
실행 결과
Build.VERSION.SDK_INT는 앱이 실행되는 기기의 버전값이며
Build.VERSION_CODES.R은 안드로이드11버전, 즉 API레벨 30을 의미함
'Kotlin' 카테고리의 다른 글
[Kotlin / Android] 09. 리소스 활용하기 - 메신저 앱의 인트로 화면 만들기 (0) | 2024.03.15 |
---|---|
[Kotlin / Android] 09. 리소스 활용하기 - 리소스 조건 설정 (0) | 2024.03.14 |
[Kotlin / Android] 09. 리소스 활용하기 - 리소스의 종류와 특징 (1) | 2024.03.11 |