在Android的布局中,除了padding和margin容易弄混之外,還有layout_gravity和gravity。按照字面意思來說,layout_gravity就是相對於layout來設置的。通俗點講就是當前控件之外的位置。
而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>
這個是原始的layout。沒有設置layout_gravity和gravity
<?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>
此時,我們將LinearLayout設置一個layout_gravity。發現沒有什么作用,生成的效果還是跟上圖一樣。然后我們回到前面講的,是相對於該控件之外的布局。
但是我們的LinearLayout的width和height已經是match_parent了,已經占滿整個屏幕了,所以再居中的話,是沒有任何效果的。好,我們現在將width和height改成wrap_content看下效果。
<?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>
發現,整個layout已經居中了。因為我們設置的width和height是wrap_content,所以layout的大小就是TextView的大小。而外面黑色部分就是andoroid的rootView。這里不做詳細說明。
然后我們先將layout的width和height設置為match_parent。看看gravity有什么作用。
<?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起的作用)。