Android中的layout_gravity和gravity的区别

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

相关文章
相关标签/搜索