마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android:layout_gravity="center" 와 android:layout_centerInParent="true"의 차이

0 추천

안녕하세요? 안드로이드 레이아웃 공부 중에 궁금한 사항이 있어 질문을 올리게 되었습니다.

android:layout_gravity="center"는 위젯의 정중앙 부분에 뷰를 위치시키고,

android:layout_centerInParent="true"는 부모뷰의 정중앙 부분에 뷰를 위치시키는 것으로 이해하였습니다.

하지만, 위젯은 뷰에 상속되어 있다는 점에서, '그렇다면 layout_gravity ="center" 속성은 

에뮬레이터 실행시 보여지는 화면(메뉴바 아래의 화면)을 기준으로 생각하는 것은 어려움이 있지 않을까?' 

라는 생각이 들게 되었습니다.  이러한 관점에서 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/button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Change Image"
        android:layout_gravity="center"/>
</LinearLayout>

 

hy6219 (120 포인트) 님이 2019년 7월 20일 질문

1개의 답변

0 추천

layout_gravity와 layout_centerInParent는 사용되는 부모 레이아웃이 다릅니다. 각 레이아웃마다 정의가 다르게 되기 때문에 레퍼런스 문서를 참고해야 합니다. 같은 layout_gravity라도 FrameLayout과 LinearLayout은 의미가 다릅니다. 

위젯과 뷰를 어떤 기준으로 이해하고 계신지 모르겠지만 위젯의 중앙에 뷰를 위치시킨다는 것은 말이 조금 이상하네요. 레이아웃 파라미터들은 전부 레이아웃 내에서 적용됩니다. 위에서 언급한 두 파라미터들은 모두 부모 레이아웃을 기준으로 자식 뷰를 배치하는데 사용하는 파라미터입니다. 

FrameLayout에서의 layout_gravity=center는 RelativeLayout의 layout_centerInParent와 차이가 없습니다. 

LinearLayout에서는 위 코드를 기준으로 보면 우선 orientation="vertical"을 적용해서 위에서 아래로 차래대로 배치가 됩니다. 위에러 아래로 배치될때 각 뷰는 기본으로 좌측(한국어기준)에 배치되지만 layout_gravity="center"를 적용하면 가운데로 정렬됩니다. vertical LinearLayout에서는 에서는 layout_gravity가 좌우 정렬에만 사용되고 horizontal에서는 위 아래 정렬을 하는데 사용됩니다. 

https://developer.android.com/reference/android/widget/LinearLayout.LayoutParams

회색 (21,340 포인트) 님이 2019년 7월 22일 답변
도와주셔서 감사합니다! 위젯과 뷰에 대해서 다시 한번 확인 후 공부를 해야겠습니다..! 공부 중에 두 경우가 비슷하다고 생각이 들었었는데, 경우에 따라 의미가 달라지는 것이었다는 것을 알려주셔서 감사합니다! 알려주신 부분과 링크를 참고하여 정리하여 공부하겠습니다! 다시 한번 감사합니다!
...