web-dev-qa-db-ja.com

Androidにおけるgravityとlayout_gravityの違いは何ですか?

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

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

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

Android:gravityAndroid:layout_gravityの使用方法の違いは何ですか?

1238
Paresh Mayani

彼らの名前はあなたを助けるでしょう:

  • Android:gravityは、それが使用されているViewの内容(つまりそのサブビュー)の重要度を設定します。
  • Android:layout_gravityは、親に対するViewまたはLayoutの重力を設定します。

そして例は here です。

1271
Sephy

Inside-Outside

  • gravityはコンテンツを配置します内部ビュー。
  • layout_gravityは、ビューの位置を調整しますoutsideそれ自体。

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

enter image description here

ノート

  • layout_gravityは、RelativeLayoutのビューでは機能しません。 LinearLayoutまたはFrameLayoutのビューに使用します。詳細については、私の 補足回答 を参照してください。
  • ビューの幅(または高さ)は、コンテンツよりも大きくなければなりません。そうでない場合、gravityは効果がありません。したがって、wrap_contentgravityは一緒に意味がありません。
  • ビューの幅(または高さ)は親よりも小さくなければなりません。そうでない場合、layout_gravityは効果がありません。したがって、match_parentlayout_gravityは一緒に意味がありません。
  • layout_gravity=centerは、垂直の線形レイアウトになっているため、ここではlayout_gravity=center_horizontalと同じように見えます。この場合、垂直方向に中央に配置できないため、layout_gravity=centerは水平方向にのみ中央に配置されます。
  • この回答は、レイアウト内のビューにgravityおよびlayout_gravityを設定することのみを扱いました。親レイアウト自体のgravityを設定するとどうなるかを確認するには、上記で参照した 補足回答 を確認してください。 (要約:gravityRelativeLayoutではうまく機能しませんが、LinearLayoutでは有用です。)

だから、layout_ gravityはビューをそのlayout。重力は、コンテンツをビュー内に配置します。

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>

関連する

490
Suragch

違い

Android:layout_gravityはビューの 外側 重力です。ビューがその親の境界線に触れる方向を指定します。

Android:gravityはそのビューの 内側 の重力です。内容をどの方向に揃えるかを指定します。

HTML/CSSと同等のもの

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

覚えやすくするための簡単なトリック

layout-gravityを "Lay-outside-gravity"としてください。

454
Vishnu Haridas

簡単な答え:コンテナのすべての子ビューの重要度を制御するには、Android:gravityまたはsetGravity()を使用します。コンテナ内の個々のビューの重要度を制御するには、Android:layout_gravityまたはsetLayoutParams()を使用します。

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

1)(本で行ったように)LinearLayoutコンテナのすべての子ビューの重要度を制御するには、レイアウトXMLファイルでAndroid:gravityAndroid:layout_gravityではなく)を使用するか、コードでsetGravity()メソッドを使用します。

2)コンテナ内の子ビューの重要度を制御するには、Android:layout_gravity XML属性を使用します。コードでは、ビューの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(またはcenter_vertical)であり、上または下に変更できます。実際のデフォルトのlayout_gravity値は-1ですが、Androidは垂直方向の中央に配置します。

水平線形コンテナ内の子ビューの水平位置を変更するには、子ビューのlayout_weight、margin、paddingを使用できます。

同様に、垂直方向のビューグループコンテナの場合、その子ビューの垂直方向の重力は上下に配置されているため変更できません。デフォルトの水平方向の重力はcenter(またはcenter_horizontal)であり、左または右に変更できます。

実際には、ボタンなどの子ビューにもAndroid:gravity XML属性と、その子ビューを制御するsetGravity()メソッド、つまりその中のテキストがあります。 Button.setGravity(int)はこの developer.Android.comエントリー にリンクされています。

37
Ying

私が集めることができるものから、 layout_gravity はその親の中のそのビューの重力であり、そして gravity はそのビューの中の子供の重力です。

これは正しいと思いますが、見つけるための最善の方法は遊んでみることです。

33
matto1990

重力がはっきりしている画像を見てください

24
Akshay Paliwal

質問にはすでに答えていますが、私は、gravity、layout_gravity、およびlayout_weightの使い方を示すサンプルをいくつか持っています。

例は http://juanpickselov.com/LayoutExamples.Zip にあります。

私はEclipseでファイルを作成し、.svnサブフォルダを削除し、スタイル、文字列、色などを含めました。レイアウトファイルはデモの要です。私はJavaとAndroidの開発初心者なので、Javaが非効率的であると思うかもしれません。ファイルはEclipseプロジェクトにコピーすることも、私はそのIDEで利用可能なAndroid開発プラグインを使ってNetbeansで使用することもできます。

12
user244298

ビュー内のコンテンツの重要度を設定する場合は「Android:gravity」を使用し、親ビュー内でこのビューの重要度を(全体として)設定する場合は「Android:」を使用します。 "layout_gravity".

10
Abhishek Tamta

私がここで私自身の説明を加えたいと思いました - iOSの背景から来て、これは私がiOSの用語で2つを内面化した方法です: 「重力」はあなたの中のあなたのサブビューの位置に影響を与えます。別の言い方をすれば、レイアウト重力があなたをあなた自身の位置に置き、重力があなたの子供の位置を決めるのです。

7
mszaro

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

FrameLayoutにおける重力とレイアウト重力の使用.....

注: -

  1. 重力 View Content の中で使用されます。これは、一部のユーザーが回答を持っているためです。すべてのViewGroup Layoutについても同じです。

  2. Layout-gravityは、何人かのユーザーが答えを持っているので親ビューで使われます。

  3. Gravity and Layout-gravity より便利に動作します FrameLayout子とともに。 FrameLayoutのタグのWe can't use Gravity and Layout-gravity.

  4. layout-gravityを使ってFrameLayoutのどの場所にでもChild Viewを設定できます。

  5. FrameLayout内ではすべての重力値を使用できます(例: - center_verticalcenter_horizontalcentertopなど)。ただし、他のViewGroupレイアウトでは不可能です。

  6. FrameLayoutLayout-gravityに完全に取り組んでいます。例: - FrameLayoutで作業している場合は、 新しいビューを追加するためにレイアウト全体を変更する必要はありません 最後にFrameLayoutの最後にView を追加し、Layout-gravityに値を付けます( これはFrameLayout のレイアウト重力の利点です)。

例を見ている......

<?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は上記と同じように動作しますが、ここでの違いは、LinearLayout ViewRelativeLayout Viewの内部でGravityを使用できることです。これはFrameLayout Viewでは不可能です。

向きが垂直のLinearLayout.

注: - ここで設定できるlayout_gravityの値は3つだけです。つまり、(left | right | centercenter_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.

注: - ここで、layout_gravityの3つの値、つまり(top | bottom | centercenter_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を使用することはできます。

6
sushildlh

これを覚えておく簡単なトリックは、重力が地球内部に私たちに適用されることです。したがって、Android:gravityは、内部ビュー用です。

out inlay out _ gravityを覚えておくと、Android:layout_gravityは、外部ビューを参照します

4
Mahendra Liya

Sandipのブログで見逃していた何かが私の問題を解決した。彼は、layout_gravityLinearLayoutでは動作しないと述べました。

もしあなたがLinearLayoutを使っていて、重力の設定があなたをナッツにしているのなら(他のものに)。

私は実際にRelativeLayoutに切り替えてから、2つのTextViewlayout_alignParentLeftlayout_alignParentRightを使って1行にして左端と右端に移動しました。

4
JustSomeGuy

重力: コンテナー内でコンテンツを移動できるようにします。 (サブビューの配置方法).

重要: (利用可能なスペース内でX軸またはY軸に沿って移動する)。

例: もしあなたがルートレベルの要素としてLinearLayout(Height:match_parent、Width:match_parent)を使って作業していたら、あなたは利用可能な全フレームスペースを持つことになるでしょう。そして、子ビューは、LinearLayout内の2つのTextView(Height:wrap_content、Width:wrap_content)を、親の重力に対応する値を使用してx/y軸に沿って移動できることを示します。

Layout_Gravity: x軸に沿ってのみ親の重力の振る舞いを上書きすることができます。

重要: (利用可能なスペース内でX軸に沿って[上書き]を移動)。

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

ボーナス: さらに深く掘り下げると、TextView内のテキストがサブビューとして機能することがわかります。そのため、TextViewに重力をかけると、TextView内のテキストが移動します。 (概念全体がここでも適用されます)

2
Ali Raza

Android:gravityは、オブジェクトの内容をオブジェクト自体の中に配置する方法を指定するために使用されます。言い換えれば、Android:gravityは、ビューのコンテンツの重力を指定するために使用されます。

Android:layout_gravityは、親の視野内の重力を指定するために、子が親に提供できる属性です。

詳細についてはあなたが訪問することができます

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

2
IntelliJ Amiya

両者の基本的な違いは、

Android:gravity はビューの子要素に使用されます。

Android:layout_gravity は、親ビューに関してこの要素に使用されます。

2
Abhishek Tandon

重力はビュー内のテキストの配置を設定するために使用されますが、layout_gravityはビューをそれ自体に設定するために使用されます。あなたがeditTextで書かれたテキストを整列させたいなら、そしてあなたは重力を使い、そしてあなたがこのeditTextまたは任意のボタンあるいは任意のビューを整列させたいならそれからlayout_gravityを使いたい、例を見ましょう。

1
Praveen Gaur

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

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

1
Mayank Garg

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

layout-gravity ---その親に関連するビューに適用されます。

0
nidhi

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

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

0
Vamsi
Android:gravity

指定された位置(割り当てられた領域)に対してビューの内容を調整するために使用されます。 Android:gravity="left"layout_widthと等しい場合、"wrap_content"は何もしません。

Android:layout_gravity 

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

0
Tulsi