안드로이드의 android:layout_weight 속성

Posted on 2010. 7. 28. 10:39
Filed Under IT/안드로이드


LinearLayout의 속성 중에 android:layout_weight 이라는 속성이 있는데요.

이 것을 이용하면 LinearLayout의 항목들 배치에 아주 도움이 됩니다.

<LinearLayout
     android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="#ffffffff"
     android:gravity="center|right"
     android:padding="1dp">

     <TextView
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:text="@string/update_time"
      style="@style/text_item.preference"
      android:layout_weight="1"
      android:gravity="right" />

     <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/edit"/>
</LinearLayout>

layout_weight 란 한마디로 UI영역에서 차지하는 중요도라고 할 수 있습니다. 이 중요도 비중을 높이면 그만큼 많은 영역을 UI영역에서 차지할 수 있죠. 설정을하지 않으면 디폴트로 0으로 설정됩니다.

위의 코드에서 TextView의 layout_weight가 1이고 Button은 설정을 하지 않았습니다. 그러면 Button이 높이가 wrap_content로 설정되어 있으니까 먼저 필요한 영역을 차지한 후 나머지 영역은 모두 TextView로 채워집니다. 만약 TextView와 Button에 layout_weight를 모두 1로 두면 어떻게 될까요? 중요도가 1:1로 설정이 되니까 화면을 절반씩 나우어 가지게 됩니다. 사용하실때 3:4든 5:5든 정수값이기만하면 비율을 맞추어 줍니다.
LinearLayout을 사용하면서 화면에 꽉차는 UI를 개발할 때는 필수품이라고 할 수 있겠죠~

그런데 만약 TextView의 layout_width를 0dp가 아닌 match_parent로 하면 어떻게 될까요? 음 다른 분들은 다들 알고 계신지 모르겠는데 layout_weight를 줄때는 layout_width를 wrap_content를 쓰던지 아니면 0dp를 줘야 합니다.
전 이걸 모르고 match_parent로 지정을 했더니 속성값이 반대로 움직이더군요.ㅋ
TextView와 Button부분의 layout_width를 match_parent로 해두고 layout_weight를 조절 했더니 양쪽이 반대로 움직이더군요. 1:9로 두고 실행시키면 9:1이 되는...
꼭 반대로 동작하지는 않을지도 모르지만 어쨋든 정상적인 동작은 기대할 수가 없으니깐 절대 꼭 wrap_content나 0dp로 하시고 사용하세요. 전 이거 잡는데 하루 걸렸습니다. 레이아웃을 너무 복잡하게 만든후에 문제를 발견해서ㅋㅋ

그리고 한가지 더, wrap_content를 지정하고 화면 비율을 나눈 경우에는 레이아웃 안쪽에 많은 항목이 있어서 크기가 커질 경우에 비율을 무시하고 내용물의 크기 많큼 레이아웃이 커집니다. 안쪽에 많은 항목이 있으면 나눈 비율보다 커질 수 도 있는거죠. 그리고 0dp를 사용한 경우에는 정확히 설정한 비율까지만 보여지게 됩니다. 나머지 항목은 가려지게 되겠죠~


About

by 쏜다

Notice

Counter

· Total
:
· Today
:
· Yesterday
: