안드로이드 기기의 다양성은 우리에게 다양한 기능과 편의성을 제공해준다, 동시에 개발자들에게는 고민을 안겨주기도 한다. 그 중 하나가 바로 '해상도'이다. 안드로이드 기기들은 Android moblie, Android TV, Android Auto 등 다양한 플랫폼에 사용되고 그 안에서도 기기에 따라 굉장히 다양한 해상도를 갖고 있으며, 이는 개발자들이 앱을 디자인하고 개발하는데 영향을 미치고 있다. 이 글에서는 안드로이드 기기별 해상도 차이에 발생할 수 있는 문제와 이를 해결하는 방법에 대해 살펴보고자 한다.
먼저, 해상도를 알아보기전에 알아야 하는 개념이 있다
바로 px, dpi, dp이다. 이들은 해상도를 표현하기 위한 단위로 안드로이드에서는 다양한 단위를 지원하기 때문에 알아 둘 필요가 있다.
PX, DPI, DP
PX
많이 들어봤을 법한 PX은 화면을 구성하는 최소 단위이다.
화면의 전체 화면 크기와 상관없이 지정한 수치(HD, QHD, FHD, 4K (3840 x 2160)....)만큼 표시되는 절대적 표시 단위이다.
DPI (Dot per inch)
dp를 알아보기전 봐야할 개념이다.
Dot Per Inch로 1인치에 들어가는 픽셀을 나타내는 단위를 뜻한다.
에를 들면 100DPI는 1인치당 픽셀이 100개 포함된다는 것을 말한다.
안드로이드에서 주요 DPI는 아래와 같다.
- ldpi : 120dpi
- mdpi : 160dpi (기본)
- hdpi : 240dpi
- xhdpi : 320dpi
- xxhdpi : 480dpi
- xxxhdpi : 640dpi
안드로이드의 기본 DPI는 160 DPI이다. 160 DPI일 때, DP와 PX이 같은 크기를 갖는다. (1dp == 1px)
DP (DIP, density-independent pixel)
밀도-독립화소라고한다. 풀어 말하면 화면의 해상도(밀도)와 상관없이 다룰 수 있는 단위라는 뜻이다.
현실 세계의 물리적인 단위와 비슷하지만, 픽셀단위는 화면 안에서만 정확하게 떨어지지 실제로 해상도가 다른 기기마다 직접 보게 되면 표현되는 길이가 다르다.
그래서 안드로이드에서는 이 문제를 방지하기 위해 밀도 독립형 픽셀(dp)을 만들어 밀도(해상도)가 서로 다른 화면에서 UI 표시 크기를 유지 할수 있도록 했다.
이렇기 때문에 다양한 해상도를 가지고 있는 안드로이드에서 dp와 해상도에 맞는 dpi를 적용한 리소스들을 사용한다.
안드로이드 UI 디자인 할 때 DP개념을 참고하여 디자인하면 사용자가 어떤 해상도의 기기를 쓰던 사용자의 기기에 맞추어지기 떄문에 사용자 경험도 좋아질 것이다.
추가. DP-PX 변환 공식
공식
- px = dp * 단말 DPI/ 160 (mdpi 기본)
- dp = px * 160(mdpi 기본) /단말 DPI
개발하다가 dp와 px의 변환이 필요할 때가 있다. 하지만 java, kotlin 코드 상에서는 dp를 다룰 수가 없어 따로 변환을 시키는 코드가 필요하다.
fun dpToPx(context: Context, dp: Float): Float {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.resources.displayMetrics)
}
ref.
https://blog.cracker9.io/2018/03/13/Android_DPI/
http://design.gabia.com/wordpress/?p=33289
https://inma.tistory.com/72 (dp2px, px2dp)
'Android' 카테고리의 다른 글
[Android] ActionBar? ToolBar! (0) | 2023.08.11 |
---|---|
[Android] RecyclerView (0) | 2023.08.10 |
[Android] TabLayout의 불편한 점을 덜어주는 ViewPager2 적용기 (0) | 2023.08.09 |
[Android] Activity Lifecycle - 2 (0) | 2023.08.02 |
[Android] Activity Lifecycle (0) | 2023.08.02 |