안드로이드폰은 여러 제조업체에서 다양한 크기로 출시한다.
그렇기 때문에 안드로이드 앱 개발자에게는 크기가 다양한 기기와 호환하는 화면을 만드는 것이 중요하다.
- dpi
dots per inch의 줄임말로 1인치 안에 있는 도트의 개수를 의미
크기 | 설명 |
---|---|
ldpi | 저밀도 화면이며 ~120dpi |
mdpi | 중밀도 화면이며 ~160dpi |
hdpi | 고밀도 화면이며 ~240dpi |
xhdpi | 초고밀도 화면이며 ~320dpi |
xxhdpi | 초초고밀도 화면이며 ~480dpi |
xxxhdpi | 초초초고밀도 화면이며 ~640dpi |
안드로이드에서 앱을 개발할 때 크기 지정에서 사용할 수 있는 단위
- dp(dpi:density-independent pixels):스크린의 물리적 밀도에 기반을 둔 단위 - sp(sip:scale-independent pixels):dp와 유사하며 글꼴 크기에 적용 - pt(points):스크린 크기의 1/72을 1pt로 함 - px: 픽셀 - mm: 밀리미터 - in: 인치
<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"/>
mdpi폰에서 1dp는 1px이다.
크기 | 배율 |
---|---|
ldpi | 0.75 |
mdpi | 1.0 |
hdpi | 1.5 |
xhdpi | 2.0 |
xxhdpi | 3.0 |
xxxhdpi | 4.0 |
안드로이드 시스템은 기본으로 크기 호환성을 지원하지만 때로는 개발자가 직접 코드에서 조정할 수 있다.
- 기기의 정보를 가져와야 조정 가능
- 기기의 크기 정보를 가져오는 방법은 API 레벨 30 이후 버전과 이전 버전에서 차이가 있음
- 30 이전 버전 - DisplayMetrics
- 30 이후 버전 - WindowMetrics
// MainActivity.kt
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}"
}