Android:gravity
およびAndroid:layout_gravity
プロパティに次の値を設定できることを私は知っています。
center
center_vertical
center_horizontal
など.しかし、私はこれらの両方に関して混乱しています。
Android:gravity
とAndroid:layout_gravity
の使用方法の違いは何ですか?
彼らの名前はあなたを助けるでしょう:
Android:gravity
は、それが使用されているView
の内容(つまりそのサブビュー)の重要度を設定します。Android:layout_gravity
は、親に対するView
またはLayout
の重力を設定します。そして例は here です。
gravity
はコンテンツを配置します内部ビュー。layout_gravity
は、ビューの位置を調整しますoutsideそれ自体。写真を見るのも役立ちます。緑と青はTextViews
で、他の2つの背景色はLinearLayouts
です。
layout_gravity
は、RelativeLayout
のビューでは機能しません。 LinearLayout
またはFrameLayout
のビューに使用します。詳細については、私の 補足回答 を参照してください。gravity
は効果がありません。したがって、wrap_content
とgravity
は一緒に意味がありません。layout_gravity
は効果がありません。したがって、match_parent
とlayout_gravity
は一緒に意味がありません。layout_gravity=center
は、垂直の線形レイアウトになっているため、ここではlayout_gravity=center_horizontal
と同じように見えます。この場合、垂直方向に中央に配置できないため、layout_gravity=center
は水平方向にのみ中央に配置されます。gravity
およびlayout_gravity
を設定することのみを扱いました。親レイアウト自体のgravity
を設定するとどうなるかを確認するには、上記で参照した 補足回答 を確認してください。 (要約:gravity
はRelativeLayout
ではうまく機能しませんが、LinearLayout
では有用です。)だから、layout_ gravityはビューをそのlayout。重力は、コンテンツをビュー内に配置します。
参照用の上記の画像の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>
Android:layout_gravity
はビューの 外側 重力です。ビューがその親の境界線に触れる方向を指定します。
Android:gravity
はそのビューの 内側 の重力です。内容をどの方向に揃えるかを指定します。
Android | CSS
————————————————————————+————————————
Android:layout_gravity | float
Android:gravity | text-align
layout-gravity
を "Lay-outside-gravity"としてください。
簡単な答え:コンテナのすべての子ビューの重要度を制御するには、Android:gravity
またはsetGravity()
を使用します。コンテナ内の個々のビューの重要度を制御するには、Android:layout_gravity
またはsetLayoutParams()
を使用します。
長い話:LinearLayout
やRadioGroup
などの線形レイアウトコンテナで重力を制御するには、2つの方法があります。
1)(本で行ったように)LinearLayout
コンテナのすべての子ビューの重要度を制御するには、レイアウトXMLファイルでAndroid:gravity
(Android: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_gravity
をcenter_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エントリー にリンクされています。
私が集めることができるものから、 layout_gravity はその親の中のそのビューの重力であり、そして gravity はそのビューの中の子供の重力です。
これは正しいと思いますが、見つけるための最善の方法は遊んでみることです。
重力がはっきりしている画像を見てください
質問にはすでに答えていますが、私は、gravity、layout_gravity、およびlayout_weightの使い方を示すサンプルをいくつか持っています。
例は http://juanpickselov.com/LayoutExamples.Zip にあります。
私はEclipseでファイルを作成し、.svnサブフォルダを削除し、スタイル、文字列、色などを含めました。レイアウトファイルはデモの要です。私はJavaとAndroidの開発初心者なので、Javaが非効率的であると思うかもしれません。ファイルはEclipseプロジェクトにコピーすることも、私はそのIDEで利用可能なAndroid開発プラグインを使ってNetbeansで使用することもできます。
ビュー内のコンテンツの重要度を設定する場合は「Android:gravity」を使用し、親ビュー内でこのビューの重要度を(全体として)設定する場合は「Android:」を使用します。 "layout_gravity".
私がここで私自身の説明を加えたいと思いました - iOSの背景から来て、これは私がiOSの用語で2つを内面化した方法です: 「重力」はあなたの中のあなたのサブビューの位置に影響を与えます。別の言い方をすれば、レイアウト重力があなたをあなた自身の位置に置き、重力があなたの子供の位置を決めるのです。
gravity
とlayout-gravity
には多くの違いがあります。私はこれら2つの概念についての私の経験を説明するつもりです( 私が観察したことで得たすべての情報といくつかのウェブサイト )。
FrameLayout
における重力とレイアウト重力の使用.....
注: -
重力 は View Content の中で使用されます。これは、一部のユーザーが回答を持っているためです。すべてのViewGroup Layout
についても同じです。
Layout-gravity
は、何人かのユーザーが答えを持っているので親ビューで使われます。
Gravity and Layout-gravity
は より便利に動作します FrameLayout
子とともに。 FrameLayoutのタグのWe can't use Gravity and Layout-gravity
.
layout-gravity
を使ってFrameLayout
のどの場所にでもChild Viewを設定できます。
FrameLayout内ではすべての重力値を使用できます(例: - center_vertical
、center_horizontal
、center
、top
など)。ただし、他のViewGroupレイアウトでは不可能です。
FrameLayout
はLayout-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>
出力:-
LinearLayoutでの重力とレイアウト重力の使用.....
Gravity
は上記と同じように動作しますが、ここでの違いは、LinearLayout View
とRelativeLayout View
の内部でGravityを使用できることです。これはFrameLayout View
では不可能です。
向きが垂直のLinearLayout.
注: - ここで設定できるlayout_gravity
の値は3つだけです。つまり、(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>
出力:-
水平方向のLinearLayout.
注: - ここで、layout_gravity
の3つの値、つまり(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>
出力:-
注: - layout_gravity
でRelativeLayout Views
を使用することはできませんが、gravity
を同じ位置に設定するためにRelativeLayout
を使用することはできます。
これを覚えておく簡単なトリックは、重力が地球内部に私たちに適用されることです。したがって、Android:gravity
は、内部ビュー用です。
out inlay out _ gravityを覚えておくと、Android:layout_gravity
は、外部ビューを参照します
Sandipのブログで見逃していた何かが私の問題を解決した。彼は、layout_gravity
はLinearLayout
では動作しないと述べました。
もしあなたがLinearLayout
を使っていて、重力の設定があなたをナッツにしているのなら(他のものに)。
私は実際にRelativeLayout
に切り替えてから、2つのTextView
をlayout_alignParentLeft
とlayout_alignParentRight
を使って1行にして左端と右端に移動しました。
重力: コンテナー内でコンテンツを移動できるようにします。 (サブビューの配置方法).
重要: (利用可能なスペース内で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内のテキストが移動します。 (概念全体がここでも適用されます)
Android:gravity
は、オブジェクトの内容をオブジェクト自体の中に配置する方法を指定するために使用されます。言い換えれば、Android:gravityは、ビューのコンテンツの重力を指定するために使用されます。
Android:layout_gravity
は、親の視野内の重力を指定するために、子が親に提供できる属性です。
詳細についてはあなたが訪問することができます
http://developer.Android.com/reference/Android/widget/LinearLayout.LayoutParams.html
両者の基本的な違いは、
Android:gravity はビューの子要素に使用されます。
Android:layout_gravity は、親ビューに関してこの要素に使用されます。
重力はビュー内のテキストの配置を設定するために使用されますが、layout_gravityはビューをそれ自体に設定するために使用されます。あなたがeditTextで書かれたテキストを整列させたいなら、そしてあなたは重力を使い、そしてあなたがこのeditTextまたは任意のボタンあるいは任意のビューを整列させたいならそれからlayout_gravityを使いたい、例を見ましょう。
gravity :textview、edittextなどの単純なビューに使用されます。
layout_gravity :線形レイアウトやFrameLayoutのような相対的な親ビューのコンテキストで現在のビューのみの重力に使用され、ビューを中央に表示するか、その他の親の重力にします。
重力 - 独自のビューに適用されます。
layout-gravity ---その親に関連するビューに適用されます。
Android:gravity
- >使用されているビューのコンテンツの重要度を設定します。
Android:layout_gravity
- >親のビューまたはレイアウトの重要度を設定します
Android:gravity
指定された位置(割り当てられた領域)に対してビューの内容を調整するために使用されます。 Android:gravity="left"
がlayout_width
と等しい場合、"wrap_content"
は何もしません。
Android:layout_gravity
親ファイルまたはレイアウトファイルを基準にしたビュー自体に使用されます。