위젯이나 레이아웃 옵션중 gravity 와 layout_gravity 은 아주 헷갈리는 것들중 하나 입니다. 같은 정렬 옵션인 것 같은데 어떤 차이가 있는지 그림과 xml 설정값을 통해 알아 보겠습니다.
▼ 우선 gravity 와 layout_gravity 의 차이점은 다음과 같습니다. 그러니까 gravity는 자신을 정렬하는 것이고, layout_gravity 는 부모에 포함된 위젯을 정렬하라는 말이 됩니다.
◎ layout_gravity : 자신을 포함하고 있는 부모 위젯 레이아웃에서 옵션값에 따라 정렬
◎ gravity : 자신의 뷰에서 포함하고 있는 데이터를 정렬,
아래 XML 은 LinearLayout 내부에 3개의 ImageView 가 존재합니다. 각 ImageView 에는 layout_gravity 가 설정이 되어 있죠. 이것의 의미는 LinearLayout 에서 자신의 위치를 셋팅하라는 말입니다. 그러니까 android:layout_gravity=”left” 는 LinearLayout 에서 왼쪽에 배치하라는 말이 되는 것이죠.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation="vertical"
android:background="#FFCC00">
<ImageView
android:id="@+id/imgView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:layout_gravity="left"
android:src="@drawable/diablo" />
<ImageView
android:id="@+id/imgView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:layout_gravity="center"
android:src="@drawable/diablo" />
<ImageView
android:id="@+id/imgView3"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:layout_gravity="right"
android:src="@drawable/diablo" />
</LinearLayout>
▼ 다음은 gravity 에 대한 설명입니다. 아래 XML 에는 LinearLayout 와 그 속에 ImageView 가 하나 포함되어 있습니다. LinearLayout 에는 gravity=”left” 로 설정이 되어 있죠. 이 말은 자신이 포함하고 있는 ImageView 위젯을 왼쪽으로 배치하라는 말이 됩니다. 만약 LinearLayout 에 layout_gravity 옵션을 적용하면 아무 변화도 없겠죠. LinearLayout 포함하는 부모 레이아웃이 없기 때문입니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
android:gravity="left"
android:background="#FFCC00">
<ImageView
android:id="@+id/imgView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:src="@drawable/diablo" />
</LinearLayout>
▼ 다음은 바로 위의 XML 과 내용이 비슷하지만 ImageView 에 layout_gravity 가 추가되어 있는 것이 차이점 입니다. 이렇게 두개가 충돌하면 어떻게 될까요? 안드로이드는 이럴 경우 외부에서부터 차래대로 적용합니다. 그러니까 LinearLayout 에 gravity=”left” 을 적용한뒤 다시 ImageView 의 layout_gravity=”right” 를 적용시킵니다. 결과는 오른쪽으로 붙어서 나오는 것이죠. 느릴때는 왼쪽으로 갔다가 오른쪽으로 이동하는 것이 보입니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
android:gravity="left"
android:background="#FFCC00">
<ImageView
android:id="@+id/imgView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:layout_gravity="right"
android:src="@drawable/diablo" />
</LinearLayout>
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 안드로이드 개발 Multiple implementations resource ▶ 안드로이드 스튜디오 Android Studio API 레벨 바꾸는 두 가지 방법 ▶ 윈도우10 설정에서 스마트폰 화면 연결, 미러링 방법 ▶ 안드로이드 개발 Fragment 생명 주기는 어떻게 되는가? ▶ 안드로이드 개발 이미지 추가하고 화면에 출력하는 방법 |
▼ 다음은 위, 아래, 왼쪽, 오른쪽이 아닌 중앙 상단이나 하단에 위치시키는 방법입니다. 이때는 or 기호를 이용해서 다중 옵션을 적용합니다. center|top 이라고 쓰시면 중앙에서 상단에 위치하라는 말이 됩니다. 이렇게 or 를 이용한 조합으로 다양한 위치에 배치시킬수가 있습니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
android:gravity="center|top"
android:background="#FFCC00">
<ImageView
android:id="@+id/imgView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:src="@drawable/diablo" />
</LinearLayout>
▼ 다음은 center 과 동일한 결과를 얻을수 있는 표현법에 대해 알아 보겠습니다. center 는 이미지를 중앙에 위치시키는 것을 말합니다. center_vertical 은 가로에서 중앙을 말하며 center_horizontal 는 세로에서 중앙을 말하므로 두개를 합치면 중앙이 되는 것입니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
android:gravity="center_vertical|center_horizontal"
android:background="#FFCC00">
<ImageView
android:id="@+id/imgView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#548745"
android:src="@drawable/diablo" />
</LinearLayout>
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 안드로이드 개발 Multiple implementations resource ▶ 안드로이드 스튜디오 Android Studio API 레벨 바꾸는 두 가지 방법 ▶ 윈도우10 설정에서 스마트폰 화면 연결, 미러링 방법 ▶ 안드로이드 개발 Fragment 생명 주기는 어떻게 되는가? ▶ 안드로이드 개발 이미지 추가하고 화면에 출력하는 방법 |
'안드로이드 개발' 카테고리의 다른 글
안드로이드 스튜디오 개발 APK 파일 찾는 방법 (0) | 2023.07.10 |
---|---|
안드로이드(Android) ImageView scale type 별로 이미지 배치 하는 방법 (0) | 2023.01.24 |
안드로이드 개발 에러 have you declared this activity in your AndroidManifest.xml ? (0) | 2023.01.14 |
안드로이드 개발 에뮬레이터 카메라 QR 스캔하기 (1) | 2022.11.15 |
안드로이드 개발 이미지 추가하고 화면에 출력하는 방법 (0) | 2022.10.23 |
안드로이드 android.os.NetworkOnMainThreadException 에러, Thread를 사용해야 되는 경우 (1) | 2022.08.02 |
안드로이드(Android) ImageView 에 이미지 회전(Image rotate) 시켜서 세팅하는 방법 (1) | 2022.07.31 |
안드로이드 개발 No cached version available for offline mode 에러 해결하기 (0) | 2022.07.19 |