(Android) Layout_gravity, gravity , baseline
먼저 layout_gravity 와 gravity속성의 차이는 무엇인가?
@ 보통 뷰에 적용되는 속성의 이름은 layout_ 이라는 단어로 시작한다
@ 따라서 layout_gravity는 뷰의 정렬을 담당하는 속성이다.(부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유공간이 생겼을 때 여유 공간 안에서 뷰를 정렬함)
@ 이에 반해 gravity는 뷰의 내부에 들어있는 내용물에 적용되는 속성이다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="177dp"
android:layout_weight="1"
android:text="큰글씨"
android:textColor="#ff0000"
android:textSize="40sp"
/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="중간 글씨"
android:textSize="20sp"
android:textColor="#00ff00"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="작은 글씨"
android:textSize="14sp"
android:textColor="#000000"/>
</LinearLayout>
baseline이라는 xml을 만든다.
위와 같이 나온다.
이 때 textView 1 큰글씨 부분에
를 추가해주면
변화가없음
이때 center로 바꾸어주면
로 바뀐다. 다시 bottom으로 바꾸면
요로콤 바뀐다 ㅇㅇ
자그럼 이제는 layout_gravity 를 지우고 그냥 gravity 속성으로 center를 줘보자
큰글씨 부분이 영역의 가운데에 왔음을 알 수 있다. (내용물의 이동)
근데 gravity 속성은 | 연산자 ( Java 기준 or 연산자막대기)를 사용하면 위치를 조합해서 사용가능
| 연산자를 사용해서 center와 top을 합쳤다.
잘보이게하기위해 영역을 아래로 늘렸더니 잘보인다.
bottom으로 바꾸어주니
내려왔다. 아주 좋아 죽는다. 근데 왜 오른쪽의 중간글씨랑 작은글씨가 내려왔을까?
심지어 중간글씨의 영역은 늘어나지도 않았다 ㅇㅇ;;
why?
그것은 최상위 레이아웃인 리니어 레이아웃의 baselineAligned 속성의 디폴트 값이 true이기 때문이다. 최상위 레이아웃인 리니어 레이아웃에 baselineAligned 속성을 추가하고 그 값을 fasle로 하자.
바뀌었다. so ez