2022. 12. 7. 01:45ㆍ_Study/AndroidStudio
폰 크기의 호환성 🐇¸.•*¨*•¸.•*¨*•¸.•*¨*•¸.•*¨*•
해당 자료는 강의 학습자료이며, 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()}"
}
'_Study > AndroidStudio' 카테고리의 다른 글
안드로이드 스튜디오 태스크 관리, 액티비티 ANR 문제와 코루틴 (1) | 2022.12.07 |
---|---|
메신저 앱의 인트로 화면 만들기 코틀린 (0) | 2022.12.07 |
안드로이드 리소스 활용하기, 리소스 종류와 특징, 리소스 조건 설정 (0) | 2022.12.07 |
시계 앱의 스톱워치 기능 만들기 코틀린 (0) | 2022.12.06 |
안드로이드 스튜디오 뷰 이벤트 (0) | 2022.12.06 |