안규 공부방

Android > LinearLayout (리니어 레이아웃) - layout_weight 속성

등록일 : 2017-07-05 11:06 조회수 : 93,771

"LinearLayout"에서 가장 좋은 점은 무엇일까요?

안드로이드 개발하실때 가장 고민되는 부분이 바로 단말기별로 가지각색인 해상도 문제 일 것입니다.

이러한 문제를 바로 "LinearLayout"으로 해결 할 수 있습니다.

바로 "layout_weight" 라는 속성을 활용하면 되는데요.

이 "layout_weight" 라는 속성은 바로 가중치를 주는 것입니다.

다시 말씀드리면 부모 레이아웃의 남은 영역을 일정한 비율로 결정한다는 의미 입니다.

1. "layout_weight" 사용하기

사실 이 "layout_weight" 속성은 "LinearLayout" 속성에 지정하는 것이 아니라, 내부에 배치 되어 있는 뷰들의 속성으로 설정하셔야 합니다.

즉, 모든 뷰들이 이 속성을 사용할 수 있죠.

하지만 이 속성은 "LinearLayout"에서 밖에 사용할 수 없습니다.

이 가중치라는 개념은 "LinearLayout"에서 밖에 적용되기 때문입니다.

자 그럼 이러한 점을 확인하고 예제코드를 보시겠습니다.




위 소스는 "LinearLayout"에 각기 다른 색을 가지고 있는 3개의 뷰를 배치해 두었습니다.

여기서 보셔야 할점은 빨간 네모부분인데요.

이부분이 바로 "layout_weight" 속성으로 가중치를 부가하는 모습입니다.

각각 1, 5, 3 의 가중치를 주고 있는 모습입니다.

이 말인 즉, 부모뷰의 세로 영역을 1:5:3 비율로 나눠서 배치 된다는 의미입니다.

그런데 왜 "세로 영역"만일까요?

그건 바로 부모 "LinearLayout"의 "orientation" 속성이 세로이기 때문이죠.

그래서 뷰들이 세로 배치되기 때문에 가중치는 세로 가중치만 줄 수 있습니다.

[여기서 잠깐] - 각 배치된 뷰들의 세로 길이는 "0dp"로 준 것은 가중치 때문에 의미가 없어졌기 때문입니다.



자 3개의 뷰가 이떻게 나눴는지 한눈에 보여주는 결과 화면입니다.

3개의 뷰가 각각 1:5:3 으로 나눠져 있음을 알 수 있습니다.

이번엔 세로가 아닌 가로 "LinearLayout"의 가중치를 주어 보겠습니다.



빨간색 네모를 보시면 "horizontal" 속성을 줌으로써 가로 레이아웃을 설정하였습니다.

그리고 파란색 네모를 보시면 각각의 뷰에 가중치를 주었습니다.

그럼 결과를 확인해 보겠습니다.



보시다 시피, 가로 비율 1:5:3으로 정확히 나눠져 있음을 확인 할수 있습니다.



2. 가중치와 일반 길이를 같이 사용하기

자 한가지 예로 3개의 뷰가 세로 "LinearLayout"에 배치 되어 있습니다.

그중 하나의 뷰는 세로 길이를 "200dp"로 주고, 나머지 2개의 뷰는 가중치를 주었습니다.

그러면 어떻게 될까요?

전체 세로 길이에서 "200dp" 를 뺴고 나머지 길이를 가중치 만큼 나눠서 가지게 됩니다.

자 위와 같이 첫번째 뷰는 가중치 없이 세로 길이 "200dp"를 주어졌고, 나머지 2개의 뷰는 가중치 1:2로 주었습니다.

자 이렇게 되면 전체 세로 길이에서 "200dp" 를 빼고 나머지 부분에서 1:2로 나눠 가지게 됩니다.



위에 보시다 시피 200dp로 우선 뷰를 차지 하고 나머지 부분을 1:2로 나눠 가지는 모습을 확인할 수 있습니다.

이렇게 섞어서 사용하시면 뷰를 구성하는 훨신 수월하실 겁니다.

리니어 레이아웃을 많이 사용하는 이유가 바로 이 가중치를 줄수 있기 때문일 것입니다.

이렇게 가중치로 뷰를 구성하여서 어떠한 해상도라도 동일한 뷰들의 배치를 볼수 있는 것이죠.

가중치 사용이 익숙해 질때 쯤이면 화면 구성하는 것 쯤은 손쉽게 하실수 있으실 겁니다.

그럼 이번 강의는 여기까지 하겠습니다.
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.