在Android的佈局中,除了padding和margin容易弄混以外,還有layout_gravity和gravity。按照字面意思來講,layout_gravity就是相對於layout來設置的。通俗點講就是當前控件以外的位置。android
而gravity就是控件內部的位置。具體來看一下Demo。佈局
<?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" >
<TextView
android:background="@android:color/holo_blue_light"
android:textColor="@android:color/black"
android:layout_width="500dp"
android:layout_height="100dp"
android:text="@string/test"/>
</LinearLayout>xml
這個是原始的layout。沒有設置layout_gravity和gravityblog
<?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:layout_gravity="center"
android:orientation="vertical" >
<TextView
android:background="@android:color/holo_blue_light"
android:textColor="@android:color/black"
android:layout_width="500dp"
android:layout_height="100dp"
android:text="@string/test"/>
</LinearLayout>utf-8
此時,咱們將LinearLayout設置一個layout_gravity。發現沒有什麼做用,生成的效果仍是跟上圖同樣。而後咱們回到前面講的,是相對於該控件以外的佈局。string
可是咱們的LinearLayout的width和height已是match_parent了,已經佔滿整個屏幕了,因此再居中的話,是沒有任何效果的。好,咱們如今將width和height改爲wrap_content看下效果。it
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" >
<TextView
android:background="@android:color/holo_blue_light"
android:textColor="@android:color/black"
android:layout_width="500dp"
android:layout_height="100dp"
android:text="@string/test"/>
</LinearLayout>io
發現,整個layout已經居中了。由於咱們設置的width和height是wrap_content,因此layout的大小就是TextView的大小。而外面黑色部分就是andoroid的rootView。這裏不作詳細說明。test
而後咱們先將layout的width和height設置爲match_parent。看看gravity有什麼做用。coding
<?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:gravity="center"
android:orientation="vertical" >
<TextView
android:background="@android:color/holo_blue_light"
android:textColor="@android:color/black"
android:layout_width="500dp"
android:layout_height="100dp"
android:text="@string/test"/>
</LinearLayout>
發現效果跟上圖的效果同樣。Layout裏面的TextView也是居中的。因此就知道,gravity是相對於控件內部居中的。
咱們再整合一下,放到TextView裏面。看看效果。
<?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" >
<TextView
android:background="@android:color/holo_blue_light"
android:textColor="@android:color/black"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="500dp"
android:layout_height="100dp"
android:text="@string/test"/>
</LinearLayout>
發現TextView裏面的文字居中了(gravity起的做用)。TextView的位置相對於LinearLayout也居中了(layout_gravity起的做用)。