[Android-Native] View

미숙한 초보 코딩.Js·2020년 12월 12일
0

View 속성

  • View 는 컨트롤이나 위젯으로 불리는 UI 구성을 말합니다. 일반적으로 사용자가 보는 화면의 구성 요소가 뷰이고 여러개의 뷰를 포함하는 것을 뷰그룹이라고 부릅니다. 다른 뷰그룹을 뷰그룹엔에 넣고 다른 뷰와 동일하게 다루도록 할 수 있습니다. 뷰그룹안에 다른 뷰그룹이 들어가는 개념입니다. 이렇기에 뷰그룹은 뷰를 상속하여 뷰그룹도 뷰처럼 다룰 수 있도록 만들어졌습니다.

상속(inheritance) 은 흔히 상속세, 상속자의 개념과 같습니다. 부모님의 재산을 자식에게 상속해주는 것입니다. 뷰그룹이 뷰를 상속했다는 것은 뷰그룹이 뷰의 속성을 물려 받았다는 뜻입니다.

Widget, Layout

  • 뷰 중에서 일반적인 컨트롤의 역할을 위젯, 뷰그룹중에 내부에 뷰들을 포함하고 있으면서 그것들의 배치 역할을 하는 것을 레이아웃 이라고 합니다.
  • 위젯을 감싸고 있는것이 레이아웃으로 생각하면 될것같습니다.

위젯이나 레이아웃의 크기

  • layout_width, layout_height
    • 두개의 속성은 require 되는 조건입니다.
    • wrap_content 속성은 뷰에 들어있는 내용물의 크기에 자동 맞춤입니다.
      • 버튼안에 글자가 길면 버튼은 가로로 길어지고 짧으면 글자의 크기에 맞게 줄어들듭니다.
    • match_parent 속성은 뷰를 담고 있는 뷰 그룹의 여유 공간을 꽉채웁니다.
      • 감싸고 있는 layout 의 여유공간을 꽉채웁니다.
    • 숫자로 크기지정
      • 10dp, 20dp 등 숫자로 지정할수 있습니다.

단위와 마진

  • px : 화면의 픽셀의 수
  • dp : 1인치 당 160개의 점이 있는 디스플레이 화면에서 1dp는 1px과 같다.
  • sp : 텍스트 크기를 지정할 때 사용하는 단위, 가변 글꼴을 기준으로 한 픽셀로 dp와 유사하나 글꼴의 설정에 따라 1sp당 픽셀수가 달라짐.

뷰에는 dp, 글자 크기에는 sp를 사용합니다.

View 영역

  • 뷰가 레이아웃에 추가될 때는 보이지 않는 뷰의 테두리 (Border)가 있습니다.
  • 뷰는 바깥쪽과 안쪽의 공간을 띄우는데 안쪽은 패딩(padding), 바깥쪽은 마진(margin)으로 하고 이 전체를 뷰영역 이라고 합니다.
  • 이때 버튼의 글자 (시작) 을 내용물 (content)라고 합니다.
  • 마진과 패딩은 위,아래,왼쪽,오른쪽 각각 값을 지정할수도 있고 전체를 한꺼번에 지정할 수 있습니다.

View 정렬

  • layout_gravity : 부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유 공간이 생겼을때 여유공간안에서 뷰를 정렬함.
  • gravity : 뷰 안에 표시하는 내용물을 정렬함.

layout_gravity 는 뷰의 정렬을 시키고, gravity 는 안쪽의 content 를 정렬시킴.

layout_weight

  • layout_weight 는 부모 컨테이너에 여유공간을 가지게 됩니다.
  • 이 뜻은 하나의 레이아웃의 width 가 100이면 두게의 버튼이 있을때 각각 weight를 1씩 부여하면 전체 1에서 각각 버튼이 50:50 반반의 비율을 나누어 가지게 됩니다.
  • 그런데 여기서 뷰의 width or height 가 wrap_content,숫자로 지정되어있어야지 match_parent로 지정되면 안됩니다.
  • weight 를 사용할땐 width의 속성 값을 0dp로 설정해야합니다.

레이아웃 변경

  • Convert View 를 통해서 변경이 가능합니다.

  • 동일한 속성의 뷰를 담고 있는 레이아웃이라도 어떤 뷰에 적용되는 방식에 따라 각각의 레이아웃마다 속성이 달라지게 됩니다.
  • 대표적으로 LinearLayout 에서 orientaion 속성이 필수 이지만 RelativeLayout은 속성이 해석되지 않습니다.

ScrollView

  • 스크롤뷰는 추가된 뷰의 영역이 한눈에 다 보이지 않을때 사용.
profile
힘들땐 블로그 하나더 적자!!![ Suyang ]

0개의 댓글