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

相關文章
相關標籤/搜索