Nuke Olaf - Log Store

[Android] 안드로이드 - 안드로이드의 크기 단위(dp, sp) 본문

Android

[Android] 안드로이드 - 안드로이드의 크기 단위(dp, sp)

NukeOlaf 2019. 11. 23. 17:32

dp 와 sp 에 대해 이해하기 위해서는 먼저 px에 대해 이해해야 한다.

px는 화면을 구성하는 최소단위인 pixel을 말한다.

px단위는 전체 화면의 크기와 상관없이 지정한 수치만큼 표시되는 절대적 표시 단위이다.

 

dpi는 dot per inch로, 1인치에 들어가는 픽셀을 나타내는 단위이다.

예를 들어, 100dpi는 기기의 화면에서 1인치당 100픽셀이 들어간다는 뜻이다.

안드로이드의 기준 DPI는 160dpi (중간밀도 화면) 이다.

 + ldpi (저밀도) ~120dpi

 + mdpi (중간 밀도) ~160dpi

 + hdpi (고밀도) ~240dpi

 + xhdpi (초고밀도) ~320dpi

 + xxhdpi (초초고밀도) ~480dpi

 + xxxhdpi (초초초고밀도) ~640dpi

160dpi인 경우에는 1dp가 1px이 된다.

즉, 밀도 독립단위 dp가 px와 같은 크기를 갖는다.

 

dp는 밀도 독립 픽셀 단위이다. (dp : Density independent pixels)

즉, 장치의 밀도에 상관 없이 물리적으로 (거의) 동일한 크기를 갖는다.

UI 레이아웃을 정의할 때, 레이아웃 치수나 위치를 지정하기 위해 사용하는 단위이다.

화면의 크기가 달라도 동일한 크기로 보여주기 위해 안드로이드에서 정의한 단위이다.

160dpi 화면의 물리적 픽셀 하나를 말한다. 즉, 160dpi화면에서 1dp는 1px이다.

( 240dpi 화면에서의 1dp는 1.5px이 될 것이다. px = dp * (dpi / 160) )

dp로 크기가 지정된 뷰는 화면의 크기와 화면 밀도, 해상도가 달라도 모두 동일한 크기로 보여준다.

layout_width="100dp"인 뷰는 160dpi의 화면에서 100px 너비로 측정되고, 0.625inch ( (1inch x 100px) / 160px )의 물리적인 크기로 보여진다.

240dpi의 화면에서는 시스템이 이 뷰를 150px로 확대해서 보여주게 되며, 위와 동일하게 0.625inch ( (1inch x 150px) / 240px )의 물리적인 크기로 보여지게 된다.

안드로이드 기기는 많은 업체에서 제작되기 때문에 화면의 크기 및 해상도도 천차만별이다.

서로 다른 화면 크기와 화면 밀도, 해상도를 가진 기기들에서 같은 모양의 UI를 제공하기 위해서는 dp를 사용해야 한다.

 

sp는 스케일 독립 픽셀 단위이다. (sp : Scale independent pixels)

sp는 dp와 유사하며 레이아웃을 정의할때 텍스트의 크기를 지정하기 위해 주로 사용된다.

sp의 기본 값은 dp의 기본 값과 같다. 그러나 sp는 사용자의 글꼴 설정을 유지한다

사용자의 글꼴크기에 따라 텍스트의 크기가 조정될 수 있다는 뜻이다.

즉, 사용자가 글꼴크기를 어떻게 설정해 놓았느냐에 따라,

동일한 디바이스에서도 25sp = 25px이 될 수도 있고, 25sp가 30px이 될 수도 있다.

( 만약 눈이 잘 안보이는 사람이 안드로이드 시스템에서 글꼴 크기를 '매우 크게'로 설정했다면, sp로 지정된 텍스트의 크기는 이 시스템 설정을 반영하여 유동적으로 보여진다 )

그래서 스케일에 독립적인 픽셀이라고 하는 것이다.

 

dp와 sp의 차이점

sp는 TextView의 textSize를 지정할 때 사용된다. dp는 화면에 따라 사이즈가 달라지지 않고 고정된 값을 갖는다.

하지만 sp는 시스템의 사이즈에 따라 TextView가 작아지거나 커진다. 요즘은 sp를 사용하는 추세이다.

반면 TextView의 사이즈를 고정값으로 줘야하는 경우가 있다. 이럴 때는 dp를 사용하면 된다.

https://velog.io/@rjsdnqkr1/SP%EC%99%80-DP%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

 

참고한 사이트 >>

// 한글 검색 (한글 자료보다는 영어 검색 자료가 훨씬 질이 좋고 이해하기 쉽다)

http://blog.rightbrain.co.kr/?p=1036

https://woovictory.github.io/2019/01/03/Android-Diff-of-DP-SP/

https://blog.cracker9.io/2018/03/13/Android_DPI/

https://offbyone.tistory.com/229

https://twogrenade.tistory.com/44

// 영어검색

https://blog.mindorks.com/understanding-density-independent-pixel-sp-dp-dip-in-android (개인적으로 이곳의 설명이 제일 마음에 든다.)

https://material.io/design/layout/pixel-density.html#density-independence (여기는 그림자료가 좋다)

https://medium.com/@sashaserg/a-mysterious-density-independent-pixel-a-quick-introduction-to-android-design-111d68be7cf5

Comments