2016-10-02 1 views
1

2つのビューを縦方向に配置したいとしましょう。最初のビューは2番目のビューよりも大きい。RelativeLayoutとLinearLayoutのandroid:gravity = "center_vertical"の動作の相違

layout_height="wrap_content"android:gravity="center_vertical"の属性を持つRelativeLayoutの中にこれらの2つのビューを配置すると、何も起こりません。これは私が得るものです:

反対で

enter image description here

、私はビューが垂直方向に中央揃えされているプロパティlayout_height="wrap_content"android:gravity="center_vertical"LinearLayour内部でこれら二つのビューを配置する場合:

enter image description here

最後に、これらの2つのビューをプロパティlayout_heightと固定高さandroid:gravity="center_vertical"RelativeLayoutの内部に配置すると、LinearLayoutと同じ結果になります。ビューは垂直方向の中央に配置されます。

私は、ビューがそれぞれのケースで垂直方向の中央にくることを期待しています。なぜこの違いがあるのか​​分かりますか?

+0

[重力によるAndroid相対レイアウトの問題]の可能な複製(http://stackoverflow.com/questions/2804411/android-relative-layout-problem-withgravity) –

答えて

1

LinearLayoutは、すべての子オブジェクトをその向き(水平または垂直)に基づいて処理します。だからあなたが重力を言っているとき: "center_vertical"。実際にあなたの親のレイアウトに基づいて参照しています。

RelativeLayoutの場合、子オブジェクトの相対的な位置(子Bの左の子A)または親(親の上端に合わせた位置)を指定することができます。

個人的には、LinearLayoutsでは重力のみ、RelativeLayoutsではcenterInParentを使用します。

0

最初のケースでは、中央に配置する子ビューにandroid:layout_centerVertical="true"を使用すると、期待通りにRelativeLayoutと動作します。

LinearLayoutの場合は、子レイアウトが親レイアウトの参照に基づいて膨張するように、最初にorientation(横/縦)を指定する必要があります。

RelativeLayoutには、名前が示すとおり、親の子であるビューの位置を指定することができますRelativeLayout

これで、実現したいビューを他の多くの方法で生成することができます。

たとえば、親レイアウトをLinearLayoutに設定します。親レイアウトにgravity属性を指定しないでください。したがって、子へのlayout_gravity属性をcerter_verticalに設定すると、これもうまくいくはずです。

0

まあ、いくつかの他のテストの後、RelativeLayoutのためのandroid:gravityの振る舞いは少しランダムです。私は使用することを避けるだけです。

関連する問題