티스토리 뷰

Mobile/Android

[Android] View와 Layout

해구름 2017. 11. 14. 23:07
반응형

View & ViewGroup

  • ViewGroup: View를 여러개 포함하고 있는 것 (다른 ViewGroup의 구성요소가 될 수 있으므로, View로 볼 수 있다)
    • layout: ViewGroup 중에서 View를 배치하는 역할을 하는 것
  • Veiw: Control, Widget으로 불리는 UI구성요소 (=Control, Widget)
    • widget: View 중에서 Control 역할을 하는 것

Composite Pattern

  • View와 ViewGroup의 관계에는 Composit Parttern이 적용되어 있다.
  • Composite Pattern: 객체가 중첩, 조합되어 하나의 객체를 이루고, 이 객체 또한 다른 객체를 구성할 수 있는 디자인 패턴
    • 장점: 유연성, 일관성 증가
    • 단점: 성능저하, 코드중복, 복잡성 증가

크기지정

  • layout_width, layout_height: 높이, 너비로 필수 값. 아래와 같은 값을 가질 수 있다.
    • wrap_content: content에 맞춤
    • match_parent, fill_parent: 부모에 맞춤. 100%와 같음. 프로요(2.2)부터 fill_parent가 match_parent로 변경됨
    • 상수 값

크기단위

  • px: 픽셀
  • in: 인치
  • mm: 밀리미터. 25.4mm는 1인치와 동일하다.
  • dp, dip: 정의상 1dp는 1/160 인치의 크기를 나타냄. 즉, 160dp는 1인치의 크기로 출력된다.
    하지만, 반드시 일치하지는 않는다, 대략 그 정도의 크기로 보여진다. 왜냐하면 스마트폰 제조사도 다양하고 휴대폰마다 사용하는 부품, 시스템설정 값도 천차만별이기 때문이다.
  • sp, sip: Scale-independent Pixels. 기본적으로 sp, sip는 dp, dip와 유사한데, 유일한 차이점은 사용자가 설정한 글꼴크기의 영향을 받는 다는 것이다. 따라서 이 값은 폰트크기나 폰트와 관련된 크기를 지정할 때 유용한다.
    참고: 안드로이드 시스템에서 사용자는 환경설정에서 글꼴크기를 지정할 수 있다
  • pt: 인쇄, 출판 작업에 사용되는 크기단위로써, 안드로이드에서 1pt는 1/72인치의 물리적 크기를 나타낸다. 즉, 기본적으로 72pt는 1인치로 출력된다. dp, dpi와 마찬가지로 내부적인 설정에 의해 크기 계산하기에, 장치마다 크기에서 차이가 있을 수 있다.

DP에 대한 상세설명

밀도 독립적 픽셀(density independent pixel)은 실제 밀도(dpi)값과 무관하게 항상 1/160인치의 크기로 출력한다는 의미이다.

실제로는 1dp가 반드시 1/160인치의 물리적 크기를 나타내지 못한다. 이는 스마트폰의 제조사도 다양하고, 사용하는 액정패널도 다양하며, 이에 따른 내부 설정 값도 천차만별이기 때문이다. 예를 들어, 1인치의 정사각형에 160X120개의 픽셀로 채워진 액정을 사용한 경우 1dp는 정사각형이 아니라 직사각형으로 보일 것이다. 또한, 특정 제조사가 3X2인치의 액정을 사용하면서 해상도는 320X240 픽셀을 사용한 경우, 1dp는 정확하게 물리적으로 1/160 인치의 크기를 가지지 않게 된다.

개발을 할 때에는 dp를 사용할 것을 권장하는데, 왜냐하면 px와 달리 dp는 어느 정도 물리적으로 일정한 크기를 보장하기 때문이다. 휴대폰이든 타블렛이든, 밀도가 높든 작든, 물리적으로 일정한 크기를 제공할 수 있는, 즉 동일한 사용자 경험을 제공하기 쉬운 dp를 사용할 것을 권장하는 것이다. 따라서 개발자는 기존처럼 모니터의 Pixel을 기준으로 크기를 계산할 것이 아니라, 실제 물리적인 크기를 생각하여 개발해야 한다.

한가지 개발을 어렵게 하는 점은, pt, mm, in, sp 등 dp 외에도 1인치의 규격을 나타내는 동일한 규격이 존재함에도, 각 단위마다 1인치의 크기가 다르게 나타나는 경우가 있다는 것이다.(제조사 마다 다름) 또한 dp도 일정한 크기를 의미하는 것이지 정확하게 물리적으로 동일한 크기가 아니기 때문에 개발자와 디자이너는 장치마다 그 크기를 계산하여 디자인하고, 장치 별로 확인해야 하기 때문에 오히려 복잡해졌다는 의견도 있다.

하지만 이는 장치의 다양성 때문이지, px단위로 개발했다면 단순할지언정 개발과정은 더욱 힘들어졌을 것이다.. 따라서 dp로 개발하는 것이 장치마다 차이점을 최소화 하는 것이다. 하지만, 차이점을 완전히 상쇄하지 못하기에 다양한 장치 별로 테스트해보는 것이 필요하다 (참고링크)

댓글