在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起的做用)。