Skip to content

Android.widget.LinearLayout

레이아웃(Layout)의 크기

레이아웃이 화면에서 얼마만큼의 크기를 차지하게 할것인가를 정할 수 있습니다. 가로크기와 세로크기에 대해서 숫자, 비율, 레이아웃이 가지는 자식들의 크기값으로 지정할 수 있습니다.

-

부모크기만큼

가질 데이터 크기만큼

pixel 또는 dp(dip)

android:layout_width

fill_parent

wrap_content

480px 또는 320dp

android:layout_height

fill_parent

wrap_content

800px 또는 533dp

android:layout_width
이 속성은 레이아웃의 가로크기를 나타냅니다.
android:layout_height
이 속성은 레이아웃의 세로크기를 나타냅니다.
부모크기만큼 (부모의 전체크기중에서, 내가 지금 작성한 레이아웃보다 먼저 작성된 레이아웃을 제외하고 남은 크기)
현재 안드로이드 SDK 버전이 올라가면서 SDK 2.2부터는 match_parent 라는 값이 나오고 있습니다. 이 값은 기존의 fill_parent와 같은 값이지만, 아직은 모든 디바이스가 2.2 이상의 SDK를 사용하지 않으니, 이 값은 사용하지 않습니다. 기존 처럼 부모크기처럼 지정할때에는 fill_parent라고 설정해줍니다.
가지게 될 데이터 크기만큼
내가 작성하려는 레이아웃이 가지게될 자식 레이아웃들의 크기가 얼마나 커질지 알 수 없는 상황일때 사용합니다. 또는, 텍스트 뷰, 이미지 뷰의 경우에는 입력받게될 텍스트, 입력될 이미지의 크기에 따라 레이아웃의 크기를 변경할때 사용합니다.
pixel 또는 dp(dip)로 직접지정
Android 디자이너와의 협업을 위한 몇가지 팁
대체리소스 제공하기 (Android Providing Resource)
직접 숫자를 지정해서 레이아웃을 작성할수도 있습니다. 하지만 이방법은 반은 추천하고 반은 추천하지 않습니다. dp의 경우에는 잘만사용한다면 왠만한 경우에 대해서도 같은 UI를 제공할 수 있는 방법이기 때문에 추천되는 경우이지만, pixel의 경우에는 상당히 비추천하는 방법입니다. 관련글 링크를 읽어보시면 아시겠지만, dp를 사용하는 방법은 많은 Resource를 제공해 줄 수 없는 상황에서 상당히 현명하고 유리한 선택이 될 수 있습니다. 모든 리소스를 제공할 수 있다면 모든 디바이스에 같은 UI를 보여줄 수 있겠지만 이는 사실상 힘든일이기 때문입니다.

Weight 적용 방법

weight 값에 따라 View의 크기를 변화시키고자 할 경우 layout_width 또는 layout_height값이 0dp이여야 한다.

gravity & layout_gravity

우선 gravity라는 단어가 모두 들어가는 두 속성이기 때문에 중력작용을 하는것인가 보다 라고 알 수 있습니다. 이제 이 속성에 들어가는 값에 따라서 레이아웃들은 그 위치로 중력을 받게 됩니다. 우리가 땅(아래)쪽으로 중력을 받는것처럼 말이죠.

android:gravity
이 속성은 현재 작성하고 있는 레이아웃의 자식 레이아웃들이 중력을 어디로 가질지 정해줍니다.
android:layout_gravitiy
이 속성은 현재 작성하고 있는 레이아웃의 중력을 어디로 가질지 정해줍니다.

부모레이아웃에서 gravity 속성에 있는 값은 자식레이아웃에서 layout_gravity에 있는 값과 같은 결과를 낼 수 있습니다. 그럼에도 두 속성을 모두 쓰려는 이유는 자식 레이아웃들이 일괄적으로 중력을 가져야 하는 경우에는 부모레이아웃에서 설정한 gravity 속성만으로 해결할 수 있지만, 자식 레이아웃들이 각각 다른 중력을 가져야 할 경우엔, 자식 레이아웃들에서 left, right 등을 설정해 주어야 하기 때문입니다. 총 7가지의 값들이 있고 그 값들은 아래와 같습니다.

android:gravityandroid:layout_gravity 에 설정할 수 있는 값들:

  • left (왼쪽으로 중력주기)
  • right (오른쪽으로 중력주기)
  • top (위로 중력주기)
  • bottom (아래로 중력주기)
  • center_vertical (수직 가운데로 중력주기)
  • center_horizontal (수평 가운데로 중력주기)
  • center (정가운데로 중력주기)

또한 이 7가지의 값들은 논리적으로 만족하는 경우에는 복수의 값을 지정할 수 있습니다. (예를들면 왼쪽으로 중력을 주면서, 수직 가운데로 중력을 준다거나, 수평가운데로 중력을 주면서 아래로 중력을 준다거나 하는 경우, 오른쪽으로 중력을 주면서 동시에 아래로 중력을 주는 경우등.)

아래는 여러가지 경우에 대해

  1. gravity (부모에서 자식에세 gravity 속성을 지정하는 경우)와
  2. layout_gravity (자기 자신의 gravity 속성을 지정하는 경우)에 대해 그림으로 표현한 것입니다.

Android_layout_gravity.png

orientation

LinearLayout에서 orientation 속성은 매우 중요합니다. 이 속성을 통해 기본적으로 자식(child) 뷰 들을 어떻게 배치할지 결정할 수 있습니다. 속성 값에는 두가지가 있습니다.

horizontal
자식 뷰(위젯)들을 가로(수평)으로 배치하겠다.
vertical
자식 뷰(위젯)들을 세로(수직)으로 배치하겠다.

방대한 내용이 아니기 때문에 짧게 썼지만, 굉장히 중요합니다. LinearLayout은 orientation을 설정하지 않더라도 기본적으로 horizontal 의 속성값을 default로 가지고 있습니다.

layout_weight

안드로이드에서 레이아웃을 구성할때 layout_weight (가중치) 속성은 많은 일을 할 수 있게 해줍니다. 레이아웃을 자동으로 늘리고 줄이고 채우는 일들을 해주기 때문에, layout_weight 속성을 사용하면 해상도가 다양한 여러 기기들에 깨지지 않는 UI를 제공해 줄 수 있습니다. 숫자로 지정해 버리면 테스트했던 디바이스가 아닌, 해상도가 다른 디바이스에서 보았을 때, 개발자가 원하지 않는 UI가 나올수 있는데, layout_weight 속성은 이런점을 해결해줄 수 있습니다.

background

뒷 배경이미지를 사용할 경우 이 속성을 통해 설정할 수 있습니다. 간단하게 android:background 라는 속성만으로 여러가지 것들을 설정 할 수 있습니다.

See also

Favorite site

References


  1. Hedge's_Thought_-_Android_understanding_LinearLayout.pdf