안드로이드 스튜디오 폰 크기의 호환성

2022. 12. 7. 01:45_Study/AndroidStudio

728x90

폰 크기의 호환성 🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•

해당 자료는 강의 학습자료이며, Do it! 깡샘의 안드로이드 앱 프로그래밍 with 코틀린을 참고하였습니다.


화면 호환성 개요

Android는 다양한 기기에서 실행되며, 이들의 기기의 화면 크기픽셀 밀도는 다양하다. 따라서 시스템은 다양한 화면에 맞게 사용자 인터페이스를 맞추기위해 기본적인 배율 조정과 크기 변경을 수행한다. 각각 화면 유형에 맞게 UI가 매끄럽게 표시되도록 하려면 추가적인 작업을 수행해야 한다.

 

다양한 화면크기

- 유연한 레이아웃 제공

- 대체 레이아웃 제공

- 늘릴 수 있는 이미지 사용

 

다양한 픽셀밀도 ( dpi : dot per inch)

밀도 독립성을 구현한 UI 디자인으로 펙셀 데신 dp or dip(density-independent pixel) 단위 사용

대체 비트맵 제공

벡터 그래픽 사용

 

 

단위는 물리적인 단위 논리적인 단위로 나눌 수 있다.

물리적 단위

- px(pixels)

- in (inches)

- mm (millimeters)

- pt (points) : 인치의 1/72 단위의 크기

 

논리적 단위

dp or dip (density-independent pixels)

- 실제 스크린의 밀도에 기반한 논리적 픽셀 단위

160dpi 화면의 1픽셀이 1dpi에 해당

안드로이드의 그래픽 요소들은 dp 단위로 설계하기를 권고

 

sp (scale-independent pixels)

- dp의 단위와 유사하나 sp는 글꼴 크기 설정에도 영향을 받음

- 안드로이드의 텍스트 요소는 sp 단위로 설계하기를 권고 -> 글꼴 크기 설정에도 영향을 받는 단위이기 때문에 텍스트로 작성한다면 sp단위를 추천하는 것이다.

 

 

 

단위 변환

소스 코드의 단위는 무조건 픽셀만 적용되기 때문에 적절한 단위 변환이 필요

dp 단위를 px 단위로 변환

px = dp * (dpi/160) : 밀도 배율 density scale

 

 

화면 밀도 독립성 구현

density : dpi(dots per inch) or ppi(pixels per inch)

dp (density-independent pixel) : 160dpi 화면의 1 픽셀이 1dp 에 해당

 

40dp 를 각 밀도로 변환 px 구하기

 

dpi 120dpi 160dpi 240dpi
px 40dp * 120px / 160dp 40dp * 160px / 160dp 40dp * 240px / 160dp
밀도 배율 0.75 1 1.5
변환 px 30px 40px 60px

배율에서 dpi도 역으로 구할 줄 알아야한다.

 

 

크기 설명 배율
Idpi 저밀도화면이며 ~120dpi 0.75
mdpi 중밀도화면이며 ~160dpi 1
hdpi 고밀도화면이며 ~240dpi 1.5
xhdpi 초고밀도화면이며 ~320dpi 2.0
xxhdpi 초초고밀도와면이며 ~480dpi 3.0
xxxhdpi 초초초고밀도화면이며 ~640dpi 4.0

 

 

 

화면 정보 가져오기

30 이전 버전에서는 DisplayMetrics 로 크기정보를 활용한다.

30버전 부터는 이방법을 지원하지 않고 WindowMertrics 를 이용한다.

val windowMetrics : WindowMetrics = windowManager.currentWindowMetrics
binding.textView.text ="width ${windowMetrics.bounds.width()}," +
        "height ${windowMetrics.bounds.height()}"

 }