Skip to content

Latest commit

 

History

History
83 lines (58 loc) · 4.84 KB

안드로이드의 dp 를 알아보자.md

File metadata and controls

83 lines (58 loc) · 4.84 KB

안드로이드 dp 를 알아보자

공부하게 된 이유

  • 안드로이드 레이아웃과 관련된 기본적인 내용이지만, 조금만 응용해야할 때 잘 모르기 때문이다.
  • 기본적인 내용을 정리하고 숙지하고, 디자이너와의 협업이 좀 더 수월했으면 하는 마음으로 공부한다.

dp 가 무엇인가 ?

  • density independent pixel 의 줄임말로 직역하면 밀도에 독립된 픽셀 이다.

  • 안드로이드에서 화면을 그릴 때 사용하는 크기의 단위이다.

  • 다른 클라이언트 단과 다르게 안드로이드는 레이아웃을 그릴 때 단위가 px 이 아닌 dp 단위로 동작한다.

dp 는 왜 사용하는가 ?

  • 다양한 크기의 해상도를 가진 기기들을 지원하기 위해서 이다. 픽셀 단위로 지정하면 서로 다른 크기의 화면에서 동일한 크기로 보여줄 수 없기 때문이다.

픽셀로 지정할 수 없는 이유

px로 지정하면 다양한 해상도를 가진 기기에서 크기가 서로 다르게 보임 px

dp로 지정하면 다양한 해상도를 가진 기기에서도 일정한 크기로 보임 dp

  • 해상도가 다른 기기에서도 일정한 크기로 보여야 view 의 구성이 의도한대로 보여줄 수 있다.

이미지 출처

그럼 dp 는 어떻게 해서 크기가 다른 기기에 일정한 크기로 화면을 제공하나요 ?

이것을 설명하기 전 dpi 라는 개념을 먼저 알고 넘어가야 한다.

dpi 란 ?

  • dots per inch 의 줄임말로, 1인치당 픽셀 수 이다.
  • 물리적인 단위인 인치에 몇 픽셀이 들어가는지에 대한 단위이다.

기본적인 dpi 의 여러 단위

  • Low density (120dpi) : ldpi
  • Medium density (160dpi) : mdpi (기본)
  • High density (240dpi) : hdpi
  • Extra High density (320dpi) : xdpi
  • xxhdpi : 480dpi
  • xxxhdpi : 640dpi

dpToPx / pxToDp 기본 공식

  • dp = px / (기기의 dpi / 기본(160(mdpi)))
  • px = dp * (기기의 dpi / 기본(160(mdpi)))

이 dpi 를 기준으로 px 을 바꿔가며 화면에 나타내기 때문에, 다른 크기의 기기에서도 일정한 크기의 화면이 나타날 수 있다.

지정된 크기가 1dp 일때 mdpi 와 hdpi 는 위의 공식에 의해 계산 하면 각각 1px / 1.5px 의 크기로 화면에 그려진다.

안드로이드가 화면을 그리는 방법 (크기 관점)

  1. 개발자가 XML 에 디자인 파일의 크기대로 지정한다. (xml 작성할 때는 dp 로 지정)

  2. 앱을 구동하면 지정한 dp를 기기의 dpi 에 따라 계산 후 px 로 변환하여 화면을 나타낸다.

동적으로 view 의 크기 또는 여백을 지정해야할 경우에는 어떻게 하는지 ?

  • 이해가 쉽게 상황을 예시로 들자면 아래와 같은 경우가 있다.
    • 상품에 대한 필터를 제공해야하는데, 필터의 값이 매번 바뀌어 서버에서 가져온 후 화면을 그려야 하는 상황 이 때 필터를 담을 UI 는 미리 그려둘 수 있지만, 여백은 지정할 수가 없다. (몇개가 서버에 존재할지 모르기 때문이다. 여백을 미리 지정하면 화면에 나타난 마지막 필터는 의미 없는 여백을 가지게 되고 화면에 정렬이 맞아보이지 않게 나타난다.)

동적으로 추가하는 방법

  1. 개발자가 필터를 그릴 때 추가할 여백 값을 코드로 지정한다.
  2. 해당 여백 값이 안드로이드의 동작을 담당하는 코드(kotlin or java) 상에서는 px 로 바로 처리가 되기 때문에 dpToPx() 과 같은 util 함수를 만들어서 계산된 px 값을 할당해준다. 해당 함수에는 위의 변환법 공식을 코드로 풀어놓은 부분이 포함 된다.

그럼 글자 크기도 dp 로 지정하는지 ?

  • 글자 크기도 dp 로 지정이 가능하지만 sp 로 지정하는 것을 권장한다.

sp 란 ?

  • Scale Independent Pixels 의 약어이다.

  • 이는 사용자의 시스템 설정 값에 영향을 받는다. 사용자의 시스템 폰트 크기 지정(ex.크게, 작게 등)에 따라 앱 내 텍스트 크기가 정해진다. 기본적으로 지정해둔 크기도 단위를 sp로 지정할 경우 사용자의 시스템 폰트 크기에 따라 다르게 보이기도 한다.

  • 사용자의 사용성을 높이기 위해 대부분 글자 크기는 sp 지정을 권장한다.

  • 다만 특수성을 띄는 문구들은 일관적으로 제공을 하기 위해서 dp 로 지정하기도 한다.

참고

GOOGLE DOCUMENT