Difference between gravity and layout
I know we can set the following values to the android:gravity
and android:layout_gravity
properties:
center
center_vertical
center_horizontal
, etc. But I am confused regarding both of these.
What is the difference between the usage of android:gravity
and android:layout_gravity
?
Their names should help you:
android:gravity
sets the gravity of the contents (ie it's subviews) of the View
it's used on. android:layout_gravity
sets the gravity of the View
or Layout
relative to its parent. And an example is here.
The difference
android:layout_gravity
is the Outside gravity of the View. Specifies the direction in which the View should touch its parent's border.
android:gravity
is the Inside gravity of that View. Specifies in which direction its contents should align.
HTML/CSS Equivalents
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
Easy trick to help you remember
Take layout-gravity
as "Lay-outside-gravity".
Inside - Outside
gravity
arranges the content inside the view. lay out _gravity
arranges the view's position outside of itself. Sometimes it helps to see a picture, too. The green and blue are TextViews
and the other two background colors are LinearLayouts
.
Notes
layout_gravity
does not work for views in a RelativeLayout
. Use it for views in a LinearLayout
or FrameLayout
. See my supplemental answer for more details. gravity
won't have any effect. Thus, wrap_content
and gravity
are meaningless together. layout_gravity
won't have any effect. Thus, match_parent
and layout_gravity
are meaningless together. layout_gravity=center
looks the same as layout_gravity=center_horizontal
here because they are in a vertical linear layout. You can't center vertically in this case, so layout_gravity=center
only centers horizontally. gravity
and layout_gravity
on the views within a layout. To see what happens when you set the gravity
of the of the parent layout itself, check out the supplemental answer that I referred to above. (Summary: gravity
doesn't work well on a RelativeLayout
but can be useful with a LinearLayout
.) So remember, layout _gravity arranges a view in its layout . Gravity arranges the content inside the view.
xml
Here is the xml for the above image for your reference:
<?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>
Related
上一篇: Android的重力相对布局问题
下一篇: 重力和布局之间的差异