Androidの重力とlayout_gravityの違いは何ですか?


1329

android:gravityおよび android:layout_gravityプロパティに次の値を設定できることを知っています。

  1. center
  2. center_vertical
  3. center_horizontal、など

しかし、私はこれらの両方について混乱しています。

用法の違いは何であるandroid:gravityとはandroid:layout_gravity


265
覚えやすい簡単な方法:「レイアウト重力」を「レイアウト外部重力」と
見なす

6
中心== center_vertical | center_horizo​​ntal
Yousha Aleayoub

4
これらの動画は違いを理解するのに大いに役立ちました:youtube.com/watch? v
Roni Castro

ImageViewはとは動作が異なるようですTextView
samis 2017

回答:


1347

彼らの名前はあなたを助けるはずです:

  • android:gravityView使用されているコンテンツ(つまりそのサブビュー)の重力を設定します。
  • android:layout_gravityViewまたはの重力をLayout親に対して設定します。

そして例はこちらです。


88
基本的に、のすべてはlayout_、外部の要素に影響を与える何かを定義します。
Triang3l 2013年

29
ほら、私はこれが面白いと思います。なぜなら、私が名前から外れただけでは、私の直感が逆になるからです。毎回、「layout_gravity」は「このViewGroupがコンテンツをレイアウトする方法の重力」を意味し、「gravity」は「このビューが引き寄せられる場所」だと思います。
Ogre

15
では、android:gravityを左に設定し、その子android:layout_gravityを右に設定するとどうなりますか?子供たちはどちら側に整列しますか?
2014年

2
@Suragchが彼の回答にコメントしたように、layout_gravityはLinearLayoutとFrameLayoutでのみ機能します。ただし、LinearLayoutには制約があります。
Marco Luglio 2015年

1
@Thupten非常に良い質問です。私はどちらかが優勢になると思います(私は子供たちのlayout_gravityを推測します)、もう1つは優勢なもののデフォルトのみです。
Trilarion

523

内側と外側

  • gravityコンテンツビュー内に配置します。
  • layout_gravityビューの位置をそれ自体のに配置します。

時にはそれも写真を見るのに役立ちます。緑と青はTextViewsで、他の2つの背景色はLinearLayoutsです。

ここに画像の説明を入力してください

ノート

  • layout_gravity内のビューでは動作しませんRelativeLayoutLinearLayoutまたはのビューに使用しますFrameLayout。詳細については、補足の回答を参照してください。
  • ビューの幅(または高さ)は、コンテンツよりも大きくする必要があります。それ以外の場合gravityは効果がありません。したがって、wrap_contentおよびgravity一緒に意味がありません。
  • ビューの幅(または高さ)は親よりも小さくなければなりません。それ以外の場合layout_gravityは効果がありません。したがって、match_parentおよびlayout_gravity一緒に意味がありません。
  • layout_gravity=center同じように見えるlayout_gravity=center_horizontal彼らは垂直線形レイアウトであるため、ここで。この場合、垂直方向に中央揃えすることはできないため、layout_gravity=center水平方向にのみ中央揃えにします。
  • この回答では、レイアウト内の設定gravitylayout_gravityビューのみを扱いました。gravity親レイアウト自体のを設定するとどうなるかを確認するには、上記で参照した補足の回答を確認してください。(概要:gravitya 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

467

違い

android:layout_gravityある外のビューの重力。ビューが親の境界に触れる方向を指定します。

android:gravityあるインサイドそのビューの重力。内容を揃える方向を指定します。

同等のHTML / CSS

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

覚えやすい簡単なトリック

テイクlayout-gravity「レイ・アウトサイド・重力」として。


あなたがウェブ開発のバックグラウンドを持っているとき、それはより理にかなっています。
Haritsinh Gohil

41

短い答え:android:gravityまたはsetGravity()を使用して、コンテナのすべての子ビューの重力を制御します。android:layout_gravityまたはsetLayoutParams()を使用して、コンテナ内の個々のビューの重力を制御します。

長い話:LinearLayoutまたはなどの線形レイアウトコンテナーで重力を制御するRadioGroupには、2つの方法があります。

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_gravitycenter_horizontalても効果はありません。デフォルトの垂直重力は中央(またはcenter_vertical)で、上または下に変更できます。実際のデフォルトlayout_gravity値は-1Android ですが、Androidでは垂直方向の中央に配置されています。

水平線形コンテナ内の子ビューの水平位置を変更するには、子ビューの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用語で2つを内部化した方法です:「レイアウト重力」はスーパービューでの位置に影響します。「重力」は、あなたの中でのあなたのサブビューの位置に影響を与えます。別の言い方をすれば、重力があなたの子供を配置する間、レイアウト重力はあなた自身を配置します。


7

とには多くの違いがgravityありlayout-gravityます。これらの2つの概念についての私の経験を説明します(私の観察といくつかのWebサイトのために得たすべての情報)。

FrameLayout.....での重力とレイアウト重力の使用

注意:-

  1. 一部のユーザーが答えを持っているので重力ビューコンテンツ内で使用され、それはすべてに同じですViewGroup Layout

  2. Layout-gravity 一部のユーザーが答えを持っているので、親ビューで使用されます。

  3. Gravity and Layout-gravityある仕事はより便利FrameLayoutチャイルズ。We can't use Gravity and Layout-gravityFrameLayoutのタグ....

  4. FrameLayout使用中の任意の場所で子ビューを設定できlayout-gravityます。

  5. 私たちは、内部でframeLayout重力のすべての単一の値を使用することができます(例: - 、center_verticalcenter_horizontalcentertopなど)が、それは他のViewGroupレイアウトでは不可能です。

  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上記と同じように機能しますが、ここでは、Gravityを内で使用できることLinearLayout Viewと、内では使用できRelativeLayout Viewないことの違いがありFrameLayout Viewます。

垂直方向のLinearLayout ....

注:-ここlayout_gravityでは、(left| right| center(別名center_horizontal))の3つの値のみを設定できます。

例を見てみましょう:-

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

を使用していLinearLayoutて、重力の設定が気が狂っている場合(私のように)、他の何かに切り替えます。

私は実際にRelativeLayout当時使用されlayout_alignParentLeftlayout_alignParentRightいた2 TextViewつのs に切り替えて、1行で左端と右端に移動しました。


4

2つの間の基本的な違いは、

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内の2つのTextView(高さ:wrap_content、幅:wrap_content)を、親の重力の対応する値を使用してx / y軸に沿って移動できます。

Layout_Gravity: x軸に沿った場合のみ親の重力動作をオーバーライドできます。

重要:(使用可能なスペース内でX軸に沿ってMOVE [オーバーライド])。

例:前の例を覚えていれば、重力によってx / y軸に沿って移動できることがわかります。TextViewをLinearLayout内に配置します。LinearLayoutが重力を指定しているとしましょう:中心; つまり、すべてのTextViewを垂直方向と水平方向の両方の中央に配置する必要があります。これで、TextViewの1つを左/右に移動したい場合は、TextViewでlayout_gravityを使用して、指定された重力動作をオーバーライドできます。

おまけ:さらに掘り下げると、TextView内のテキストがサブビューとして機能することがわかります。したがって、TextViewに重力を適用すると、TextView内のテキストが動き回ります。(ここでもコンセプト全体が適用されます)


1

Gravityはビュー内のテキストの配置を設定するために使用されますが、layout_gravityはビュー自体を設定するために使用されます。editTextで記述されたテキストを配置して重力を使用し、このeditTextまたは任意のボタンまたはビューを配置してlayout_gravityを使用する場合の例を考えてみましょう。非常に簡単です。


1

重力:textview、edittextなどの単純なビューに使用されます。

layout_gravity:線形レイアウトやFrameLayoutなどの相対的な親ビューのコンテキストで現在のビューの重力のみに使用され、ビューを中央またはその他の親の重力で表示します。


layout_gravity:現在のビューでは、その相対的な親のコンテキストで重力のみが使用され、その親の内部にある他のビューでは使用されません。
チンタクパテル2018

0
android:gravity

指定された位置(割り当てられた領域)を基準にしてビューのコンテンツを調整するために使用されます。android:gravity="left"layout_width等しい場合は何もしません"wrap_content"

android:layout_gravity 

親ファイルまたはレイアウトファイルを基準にしたビュー自体に使用されます。


0

android:gravity ->使用されているビューのコンテンツの重力を設定します。

android:layout_gravity ->親のビューまたはレイアウトの重力を設定します


0

重力-独自のビューに適用されます。

レイアウト重力---その親に関連するビューに適用されます。


0

android:gravity一方、子供の重心(位置)を設定するandroid:layout_gravity設定ビュー自体の位置。それが役に立てば幸い

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.