2012년 11월 29일 목요일

xml의 layout_gravity에 대한 숨겨진 규칙






xml의 layout_gravity에 대한 숨겨진 규칙

안드로이드 앱 개발을 하다보면 xml 레이아웃 파일에서 조정하는 작업들이 생각처럼 잘 안 먹혀 들어갈 때가 있다.
특히 layout_gravity에 대해 작업할 때 그런 경험을 자주 하게 된다.

그 이유는 이런 개념 때문이다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
           android:id="@+id/btnPlus"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:padding="10dip"
           android:text=" 테스트 "
           android:layout_gravity="center"
           android:textSize="25sp" />
</LinearLayout>

LinearLayout의 orientation이 vertical일 경우 
Button의 layout_gravity는 수평 관련 속성만 적용이 된다.
예를 들어 layout_gravity="left" 혹은 center_horizontal 혹은 right와 같이 수평 관련 속성만 적용이 된다.
수직 관련 속성은 적용이 안된다. 
예를 들어서 layout_gravity="bottom", 혹은 top...은 적용이 안된다.

만일 orientation이 horizontal이라면 
Button의 layout_gravity는 수직 관련 속성만 적용이 된다.
bottom, top, center_vertical

이 이야기의 핵심은 LinearLayout에서 첫 번째 방향을 설정했으면(만일 수평이면) 두 번째 방향 설정(layout_gravity)에서는 수평인 상태에서 그 수편 중 어느 위치로 움직일 것인지를 결정하는 것만 허용이 된다는 것이다. 
즉 수평이 첫 번째 설정 값이면(LinearLayout에서) 그 수평 중 top에 놓일지, bottom에 놓일지, center_vertical에 놓일지만 결정한다는 뜻이다.

댓글 없음:

댓글 쓰기