두서없는 공부 노트/Android

(Android) Layout_gravity, gravity , baseline

kkm8257 2020. 8. 23. 17:15
반응형

먼저 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

반응형