·
최종수정 : 2015. 10. 29.
·
작성/수정내용 :
- 여러 view 에서 거의 공통적으로 사용하고 있는 gravity 속성에 대해서 정리해 봅니다.
시작하기에 앞서...
이제 연말인가 봅니다.
날씨도 많이 추워졌습니다.
예전에는 12월까지는 옷을 한 겹만 입고 댕겨도 거뜬했는데... 이젠 2겹 3겹 입어도 눈물이 날거 같네요... ㅜㅜ
# gravity
gravity 는 안드로이드 개발을 하다보면 정말 많이 보는 속성입니다.
뷰나 뷰그룹에 두루 사용되고 있는 속성이죠.
그래서 한 번 정리를 해보았습니다.
우선은 가장 많이 사용되는 LinearLayout와 RelativeLayout, TextView 등 에서
공통적으로 사용되는 속성 위주로 정리 하였습니다.
(사실 저 3개 에서는 속성이 동일합니다.)
예제 화면은 LinearLayout를 기준으로 작성하였습니다.
우선 속성표를 먼저 보고 아래 예제를 보겠습니다.
속성값
|
해당 위젯을 윗쪽에 위치 시킵니다. 이때 사이즈에 변화는 없습니다.
|
bottom
|
해당 위젯을 하단에 위치 시킵니다. 이때 사이즈에 변화는 없습니다.
|
해당 위젯을 왼쪽에 위치 시킵니다. 이때 사이즈에 변화는 없습니다.
|
right
|
해당 위젯을 오른쪽에 위치 시킵니다. 이때 사이즈에 변화는 없습니다.
|
center_vertical
|
해당 위젯을 세로 중앙에 위치 시킵니다. 이때 사이즈에 변화는 없습니다.
|
fill_vertical
|
해당 위젯의 세로를 부모 뷰그룹의 사이즈에 맞게 늘려 채워줍니다.
|
center_horizontal
|
해당 위젯을 가로 중앙에 위치 시깁니다. 이때 사이즈에 변화는 없습니다.
|
fill_horizontal
|
해당 위젯의 가로를 부모 뷰그룹의 사이즈에 맞게 늘려 채워줍니다.
|
center
|
해당 위젯을 정중앙에 위치 시킵니다. 이때 사이즈의 변화는 없습니다.
|
해당 위젯을 가로/세로 길이를 부모 뷰그룹의 사이즈에 맞게 늘려 채워줍니다.
|
clip_vertical
|
해당 위젯의 세로 길이가 부모 뷰그룹보다 클 경우 넘어서는 부분은 잘라냅니다.
|
clip_horizontal
|
해당 위젯의 가로 길이가 부모 뷰그룹 보다 클 경우 넘어서는 부분은 잘라냅니다.
|
start
|
해당 위젯을 부모 뷰그룹의 시작점에 위치 시켜 줍니다. 이때 사이즈의 변화는 없습니다.
|
해당 위젯을 부모 뷰그룹의 마지막에 위치 시켜 줍니다. 이때 사이즈의 변화는 없습니다.
|
그런데 실제로 위 속성값중 실제로 어떤 속성이 자주 쓰일지 잘 모르겠습니다.
아래 그림을 보면 아시겠지만
top, left, start 는 결과 값이 같습니다.
게다가 fill 3가지 속성값은 제대로 못한 것인지 전혀 값이 나오지 안네요...
내용 대로라면 길이를 늘려야 하는데... 아... 제 영어 실력이 문제 일지도.... ㅜㅜ
아무튼 결과 화면 같이 보겠습니다.
제 핸드폰으로 실행한 화면입니다.
안드로이드 스튜디오에서 미리 보고하면 타이틀바에 'gravity'라는 글자가 안나오드라구요...
AVD를 돌리면 나오기는 하는데... 너무 버벅 거려서...
속성값 : top, bottom
속성값 : left, right
속성값 : center_vertical, center_horizontal
속성값 : center
속성값 : start, end
그리고 gravity속성은 중복 적용하여 위치를 지정할 수 있습니다.
속성을 중복 적용 하기 위해서는 | (파이프라인) 표시로 묶을 수 있습니다.
속성값 : end|bottom, start|bottom
그리고... clip_ .....
이 속성이 과연 얼마나 많이 쓰일지 모르겠습니다
뷰의 크기가 부모 뷰그룹의 크기 보다 클때
나머지 부분은 잘라 내라는 속성 입니다.
예를 들어
부모 뷰그룹의 가로가 200 인 화면에
가로가 300인 자식뷰를 표현 한다고 했을때
부모보다 자식의 길이가 크니까 모두 한 화면에 출력을 해줄 수 없습니다.
이럴때 어느 부분을 기준으로 자식을 잘라서 보여 주는지를 설정해 줍니다.
기준을 왼쪽에 놓는다면 오른쪽 나머지 부분이 짤리고
반대로 기준이 오른쪽이라면 왼쪽부분 부분이 짤리게 됩니다.
속성값 : clip_vertical|bottom, clip_vertical|top
위 그림의 좌측은
기준이 bottom 이고,
오른쪽 그림은 기준이 top 입니다.
글자는 정중앙에 오도록 설정 해놓았습니다.
따라서 좌측의 그림은 윗 부분이 잘려 나가기 때문에 글자가 중앙보다 조금 더 위쪽에 치우쳐 있고
우측의 그림은 기준이 상단에 있기 때문에 글자가 중앙에서 조금 아래 쪽으로 내려와 있습니다.
마찬 가지로 아래 그림도 기준이 오른쪽이냐 왼쪽이냐에 따라 나머지가 잘려나가게 되어
중앙에 있어야 할 글자가 좌/우로 치우쳐 보입니다.
속성값 : clip_horizontal|left, clip_horizontal|right
그리고 fill은... 왜 안될까요...
마지막으로
gravity는 'layout_' 가 붙은 녀석과 안붙은 녀석으로 구분할 수 있습니다.
이 둘의 차이는 누가에게 속성값을 적용할 대상의 차이라고 볼 수 있습니다.
쉽게 생각해서
layout_gravity 는 부모 뷰그룹에 '엄마 나는 이떻게 설정해주세요' 라고 하는 것과 같습니다.
그리고 gravity 는 '내 아래 있는 자식들은 이렇게 설정 하겠다.' 라고 설정하는 것입니다.
아... 그런데 최상단 뷰그룹에도 layout_gravity 를 설정할 수 있죠?
최상단 뷰그룹인데 어떻게 가능하냐구요?
이유는 간단합니다.
개발자가 수정 가능한 뷰그룹(대부분 activity_main의 최상의 뷰그룹) 위에 안드로이드에서 지정하는 뷰그룹이 존재하기 때문입니다.
그 뷰그룹은 개발자가 어찌 할 수 없는 부분이죠.
휴~