안드로이드에서 중력과 layout_gravity의 차이점은 무엇입니까?


1328

다음 값을 android:gravityand android:layout_gravity속성으로 설정할 수 있다는 것을 알고 있습니다.

  1. center
  2. center_vertical
  3. center_horizontal

그러나 나는이 두 가지에 대해 혼란 스럽다.

의 사용의 차이 무엇 android:gravityandroid:layout_gravity?


265
쉬운 트릭 기억 : 테이크 "레이아웃 중력을" "레이 - 외부 중력"로
비슈누 Haridas에게

6
center == center_vertical | center_horizontal
Yousha Aleayoub

4
:이 비디오는 차이를 이해하는 것이 나에게 많은 도움이 youtube.com/watch?v=DxfYeAUd238 youtube.com/watch?v=1FyAIWLVcTc
로니 카스트로

ImageView의 것과 다른 것으로 보입니다 TextView.
samis

답변:


1346

그들의 이름은 당신을 도울 것입니다 :

  • android:gravity사용되는 컨텐츠의 내용 (즉, 하위 뷰)의 중력을 설정합니다 View.
  • android:layout_gravity중력의 설정 View또는 Layout부모에 대하여.

그리고 예가 여기 있습니다 .


88
기본적으로 모든 layout_요소는 외부 요소에 영향을 미치는 것을 정의합니다.
Triang3l

29
이름이 잘못되면 내 직감이 다른 방향으로 돌아 가기 때문에 나는 이것이 재미 있다는 것을 알았습니다. 매번 "layout_gravity"는 "이 ViewGroup이 컨텐츠를 배치하는 방법에 대한 중력"을 의미하고 "gravity"는 "이 뷰가 중점을 둔 곳"이라고 생각합니다.
오우거

15
이 경우 어떤 일이 발생 android:gravity왼쪽과 어린이로 설정되어 android:layout_gravity오른쪽으로 설정되어 있습니까? 아이들은 어느쪽에 정렬됩니까?
Thupten

2
@Suragch가 그의 답변에 대해 언급 한 것처럼 layout_gravity는 LinearLayout 및 FrameLayout에서만 작동합니다. LinearLayout에는 제약이 있습니다.
Marco Luglio 5

1
@Thupten 아주 좋은 질문입니다. 나는 하나가 우세하다고 생각한다 (어린이의 layout_gravity를 추측한다). 그리고 다른 하나는 우세한 것의 기본값 일 뿐이다.
Trilarion

522

안 밖

  • gravity안에 내용을 정렬합니다 .
  • layout_gravity외부 에서 뷰의 위치를 ​​정렬합니다 .

때로는 사진을 보는 것도 도움이됩니다. 녹색과 파란색은 TextViews다른 두 가지 배경색입니다 LinearLayouts.

여기에 이미지 설명을 입력하십시오

노트

  • layout_gravity보기에는 작동하지 않습니다 RelativeLayout. LinearLayout또는의 보기에 사용하십시오 FrameLayout. 자세한 내용은 보충 답변 을 참조하십시오.
  • 뷰의 너비 (또는 높이)는 내용보다 커야합니다. 그렇지 않으면 gravity아무런 영향을 미치지 않습니다. 따라서, wrap_contentgravity의미가 함께 있습니다.
  • 뷰의 너비 (또는 높이)는 부모보다 작아야합니다. 그렇지 않으면 layout_gravity아무런 영향을 미치지 않습니다. 따라서, match_parentlayout_gravity의미가 함께 있습니다.
  • layout_gravity=center같은 보이는 layout_gravity=center_horizontal그들이 수직 선형 레이아웃에 있기 때문에 여기에. 이 경우 세로로 가운데에 맞출 수 없으므로 layout_gravity=center가로로만 가운데에 맞추십시오.
  • 이 답변 은 레이아웃 내에서 설정 gravitylayout_gravity보기 만 처리했습니다 . gravity부모 레이아웃 자체 를 설정할 때 어떤 일이 발생하는지 보려면 위에서 언급 한 보충 답변 을 확인하십시오 . (요약 :에 gravity잘 작동하지 않지만에 RelativeLayout유용 할 수 있습니다 LinearLayout.)

따라서 layout_gravity는 레이아웃 에 뷰를 정렬 합니다 . 중력은 내용을보기 안에 배열합니다.

xml

참조를 위해 위 이미지의 xml은 다음과 같습니다.

<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#e3e2ad"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="left"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center_horizontal"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="right"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center"
            android:text="center" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#d6c6cd"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="layout_gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="left"
            android:background="#bcf5b1"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:background="#aacaff"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="right"
            android:background="#bcf5b1"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="#aacaff"
            android:text="center" />

    </LinearLayout>

</LinearLayout>

관련


Suragch 덕분에 시각적으로 본 후 더 쉬워 보입니다.
Haritsinh Gohil

466

차이점

android:layout_gravity뷰 의 외부 중력입니다. 뷰가 부모의 경계에 닿아 야하는 방향을 지정합니다.

android:gravity뷰 의 내부 중력입니다. 내용이 정렬 될 방향을 지정합니다.

HTML / CSS 상당

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

기억하기 쉬운 간계

layout-gravity"외부 중력"으로 간주 하십시오 .


웹 개발 배경이 있으면 더 의미가 있습니다.
Haritsinh Gohil

40

단답 : 컨테이너의 모든 자식 뷰의 중력을 사용 android:gravity하거나 setGravity()제어합니다. 컨테이너에서 개별 뷰의 중력을 사용 android:layout_gravity하거나 setLayoutParams()제어합니다.

긴 이야기 : 제어 중력 선형 레이아웃 컨테이너 등의 LinearLayout또는 RadioGroup두 가지 방법이 있습니다 :

1) LinearLayout(책에서했던 것처럼) 컨테이너 의 모든 자식 뷰의 중력을 제어하려면 레이아웃 XML 파일 또는 코드의 메소드에서 android:gravity(아님 android:layout_gravity)를 사용 하십시오 setGravity().

2) 컨테이너에서 하위 뷰의 중력을 제어하려면 android:layout_gravityXML 속성을 사용하십시오 . 코드에서는 LinearLayout.LayoutParams시야 를 확보 하고 중력을 설정해야합니다. 다음은 가로 방향 컨테이너에서 단추를 아래로 설정하는 코드 예제입니다.

import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...

Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams(); 
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);

수평 LinearLayout컨테이너의 경우, 자식 뷰의 수평 중력은 차례로 왼쪽 정렬되며 변경할 수 없습니다. 설정 android:layout_gravity하는 것은 center_horizontal효과가 없습니다. 기본 수직 중력은 center (또는 center_vertical)이며 상단 또는 하단으로 변경할 수 있습니다. 실제로 기본값 layout_gravity-1Android이지만 세로 중앙에 놓았습니다.

가로 선형 컨테이너에서 자식보기의 가로 위치를 변경하려면 자식보기의 layout_weight, 여백 및 패딩을 사용할 수 있습니다.

마찬가지로 세로 뷰 그룹 컨테이너의 경우 하위 뷰의 세로 중력이 서로 아래로 정렬되며 변경할 수 없습니다. 기본 수평 중력은 중심 (또는 center_horizontal)이며 왼쪽 또는 오른쪽으로 변경할 수 있습니다.

실제로 버튼과 같은 자식 뷰에는 android:gravityXML 속성과 setGravity()자식 뷰를 제어 하는 방법 (텍스트)도 있습니다. 은 Button.setGravity(int)이 연결되어 developer.android.com 항목 .


36

에서 내가 무엇을 수집 할 수 있습니다 layout_gravity하는 것은 부모의 내부 해당 뷰의 중력이며, 무게는 해당 뷰 내부의 아이들의 중력이다.

나는 이것이 옳다고 생각하지만 알아내는 가장 좋은 방법은 놀아 보는 것입니다.



12

뷰 내에서 컨텐츠의 중력을 설정하려면 "android : gravity"를 사용하고 부모 뷰 내에서이 뷰의 전체 (중력)를 설정하려면 "android : layout_gravity ".


8

iOS에 대한 배경 지식을 바탕으로 설명을 추가하겠다고 생각했는데, 이것이 iOS 용어로 두 가지를 내재화 한 방법입니다. "중력"은 귀하의 서브 뷰 위치에 영향을줍니다. 달리 말하면, 중력은 아이들을 배치하는 동안 Layout Gravity는 당신을 위치시킵니다.


7

gravity와에 많은 차이가 있습니다 layout-gravity. 나는이 두 가지 개념에 대한 나의 경험을 설명하려고합니다 ( 내 관찰 및 일부 웹 사이트로 인해 얻은 모든 정보 ).

FrameLayout..... 에서 중력 및 레이아웃 중력 사용

노트:-

  1. 중력 은 일부 사용자가 답변을 가지고 있으며 모두에게 동일하기 때문에 View Content 내부에서 사용됩니다 ViewGroup Layout.

  2. Layout-gravity 일부 사용자가 답변을 가지고 있으므로 상위보기와 함께 사용됩니다.

  3. Gravity and Layout-gravity이다 일 더 유용FrameLayout차일. We can't use Gravity and Layout-gravityFrameLayout의 태그에서 ....

  4. FrameLayout사용 중 어디서나 Child View를 설정할 수 있습니다 layout-gravity.

  5. 우리는 FrameLayout이 내부 중력의 모든 단일 값 사용할 수 있습니다 (예 : - center_vertical, center_horizontal, center, top, 등)하지만, 다른 뷰 그룹 레이아웃과 함께 할 수 없습니다.

  6. FrameLayout완전히 작업 중입니다 Layout-gravity. 예 : - 당신이 작업하는 경우 FrameLayout다음 전체 레이아웃을 변경할 필요가 없습니다 새보기를 추가. 당신은 단지 보기를 추가 에 마지막으로 FrameLayout그를주는 Layout-gravity값. ( 이것은 FrameLayout이 레이아웃 중력의 adavantages입니다 ).

예를 보았습니다 ...

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#264bd1"
        android:gravity="center"
        android:layout_gravity="center"
        android:text="Center Layout Gravity"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#1b64b9"
        android:gravity="bottom"
        android:layout_gravity="bottom|center"
        android:text="Bottom Layout Gravity" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#d75d1c"
        android:gravity="top"
        android:layout_gravity="top|center"
        android:text="Top Layout Gravity"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginTop="100dp"
        android:textColor="#d71f1c"
        android:gravity="top|right"
        android:layout_gravity="top|right"
        android:text="Top Right Layout Gravity"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginBottom="100dp"
        android:textColor="#d71cb2"
        android:layout_gravity="bottom"
        android:gravity="bottom"
        android:text="Top Left Layout Gravity"/>

</FrameLayout>

산출:-

g1

LinearLayout에서 중력 및 레이아웃 중력 사용 .....

Gravity위 그러나 여기 differnce 같은 작업하는 우리가 내부의 중력을 사용할 수 있다는 것입니다 LinearLayout View하고 RelativeLayout View있는 것은 가능하지 않다 FrameLayout View.

방향이 수직 인 LinearLayout ....

참고 :-여기서는 3 개의 값만 layout_gravity( left| right| center(라고도 함 center_horizontal)) 설정할 수 있습니다 .

예를 보았습니다 :-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#264bd1"
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:text="Center Layout Gravity \nor \nCenter_Horizontal"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginTop="20dp"
        android:textColor="#d75d1c"
        android:layout_gravity="right"
        android:text="Right Layout Gravity"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginBottom="100dp"
        android:textColor="#d71cb2"
        android:layout_gravity="left"
        android:layout_marginTop="20dp"
        android:gravity="bottom"
        android:text="Left Layout Gravity"/>

</LinearLayout>

산출:-

g2

방향이 수평 인 LinearLayout ....

참고 :-여기서 3 개의 값 layout_gravity(( top| bottom| center()이라고도 함 center_vertical)을 설정할 수도 있습니다 ).

예를 보았습니다 :-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="120dp"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#264bd1"
        android:gravity="center"
        android:layout_gravity="bottom"
        android:text="Bottom \nLayout \nGravity"/>

    <TextView
        android:layout_width="120dp"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginTop="20dp"
        android:textColor="#d75d1c"
        android:layout_gravity="center"
        android:text="Center \nLayout \nGravity"/>


    <TextView
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginBottom="100dp"
        android:textColor="#d71cb2"
        android:layout_gravity="left"
        android:layout_marginTop="20dp"
        android:text="Left \nLayout \nGravity"/>

</LinearLayout>

산출:-

g3

참고 : - 우리는 사용할 수 없습니다 layout_gravityRelativeLayout Views있지만 우리가 사용할 수있는 gravity설정에 RelativeLayout.... 같은 위치에 차일


1
textColor모두 흰색으로 설정하면 view매우 좋습니다. : D
Pratik Butani

확실해? 흑백으로 보이므로 모든보기마다 다른 색상을 사용했습니다.
sushildlh

6

이것을 기억하는 쉬운 방법은 중력이 지구 내부에 적용된다는 것입니다. 그래서 android:gravity위한 내부 보기.

Rememeber 밖으로누워 아웃 _gravity 당신이 기억하는 데 도움이 android:layout_gravity참조 할 외부 보기


5

Sandip의 블로그에서 내가 놓친 부분에서 문제가 해결되었습니다. 그는 layout_gravity작동하지 않는다고 말했다 LinearLayout.

a를 사용 LinearLayout하고 중력 설정으로 인해 나처럼 견과를 느끼는 경우 다른 것으로 전환하십시오.

나는 사실로 전환 RelativeLayout한 후 사용 layout_alignParentLeftlayout_alignParentRight2 개 포함에 TextView맨 왼쪽과 맨 오른쪽으로 이동 한 줄에를 얻을 수의.


4

이 둘의 기본적인 차이점은

android : gravity 는 뷰의 하위 요소에 사용됩니다.

android : layout_gravity 는 부모보기와 관련하여이 요소에 사용됩니다.


3

android:gravity객체 자체 내에 객체의 내용을 배치하는 방법을 지정하는 데 사용됩니다. 즉, android : gravity는 뷰 컨텐츠의 중력을 지정하는 데 사용됩니다.

android:layout_gravity 부모가 볼 수있는 중력을 지정하기 위해 자식이 부모에게 제공 할 수있는 속성입니다.

자세한 내용은 방문 할 수 있습니다

http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html


2
여러 개의 답변이 이미 게시되어 있으며 거의 ​​동일한 내용으로 덮여 있으므로 새로운 답변이 필요하지 않습니다!
Paresh Mayani

3

중력 : 컨테이너 내에서 내용을 이동할 수 있습니다. (하위 뷰가 배치되는 방법).

중요 : (사용 가능한 공간 내에서 X 축 또는 Y 축을 따라 이동).

예 : LinearLayout (높이 : match_parent, 너비 : match_parent)을 루트 수준 요소로 사용한다면 전체 프레임 공간을 사용할 수 있습니다. 자식 뷰에 따르면 LinearLayout 내부의 TextView 2 개 (높이 : wrap_content, 너비 : wrap_content)는 부모의 중력에 해당하는 값을 사용하여 x / y 축을 따라 이동할 수 있습니다.

Layout_Gravity : x 축을 따라서 만 부모 중력 동작을 무시할 수 있습니다.

중요 : (사용 가능한 공간 내에서 X 축을 따라 이동 [재정의]).

예 : 앞의 예를 명심하면 중력으로 인해 x / y 축을 따라 움직일 수 있습니다. LinearLayout 내부의 TextViews LinearLayout이 중력을 지정한다고 가정 해 봅시다 : center; 즉, 모든 TextView는 세로 및 가로 가운데에 있어야합니다. 이제 TextView 중 하나를 왼쪽 / 오른쪽으로 이동하려면 TextView에서 layout_gravity를 사용하여 지정된 중력 동작을 재정의 할 수 있습니다.

보너스 : 자세히 살펴보면 TextView 내의 텍스트가 하위보기로 작동한다는 것을 알 수 있습니다. 따라서 TextView에 중력을 적용하면 TextView 내부의 텍스트가 이동합니다. (전체 개념도 여기에 적용됩니다)


1

Gravity는 뷰에서 텍스트 정렬을 설정하는 데 사용되지만 layout_gravity는 뷰 자체를 설정하는 데 사용됩니다. editText로 작성된 텍스트를 정렬하고 중력을 사용 하고이 editText 또는 모든 버튼 또는보기를 정렬 한 다음 layout_gravity를 사용하려는 경우 예를 들어 매우 간단합니다.


1

중력 : textview, edittext 등과 같은 간단한 뷰에 사용됩니다.

layout_gravity : 선형 레이아웃 또는 FrameLayout과 같은 상대 부모보기와 관련하여 현재보기에만 중력에 사용되어 부모의 중심 또는 다른 중력으로 볼 수 있습니다.


layout_gravity : 부모 내부의 다른 뷰가 아니라 상대 부모의 컨텍스트에서 현재 뷰에만 사용됩니다.
Chintak Patel

0
android:gravity

지정된 위치 (할당 된 영역)를 기준으로 뷰의 내용을 조정하는 데 사용됩니다. 같으면 android:gravity="left" 아무것도하지 않을 것입니다layout_width"wrap_content"

android:layout_gravity 

부모 또는 레이아웃 파일을 기준으로 뷰 자체에 사용됩니다.


0

android:gravity -> 사용 된 View 내용의 중력을 설정합니다.

android:layout_gravity -> 부모보기 또는 레이아웃의 중력을 설정합니다


0

중력-자신의 관점에 적용됩니다.

layout-gravity --- 부모와 관련된보기에 적용됩니다.


0

android:gravity반면 어린이의 비중 (위치)을 설정 android:layout_gravity세트 뷰 자체의 위치. 그것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.