先來看官方文檔的定義:FrameLayout是最簡單的一個布局對象。它被定制為你螢幕上的一個空白備用區域,之後你可以在其中填充一個單一對象 — 比如,一張你要釋出的圖檔。所有的子元素将會固定在螢幕的左上角;你不能為FrameLayout中的一個子元素指定一個位置。後一個子元素将會直接在前一個子元素之上進行覆寫填充,把它們部份或全部擋住(除非後一個子元素是透明的)。
簡單來說:FrameLayout中的子元素總是以螢幕的左上角層疊在一起。
事實上,這是不确切的,我們可以對子元素添加android:layout_gravity屬性來設定他們的位置的。
比如,下面的布局子控件都在什麼位置呢?
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="center"
android:src="@drawable/candle"
/>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#00ff00"
android:text="@string/hello"
/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="Start"
/>
</FrameLayout>
在FrameLayout布局裡面android:layout_margin的各種屬性必須依賴于android:layout_gravity,也就是說,要想margin生效,必須設定view的layout_gravity屬性。
下面的配置将2個控件顯示在螢幕的中間:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:layout_width="200dip"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_gravity="center"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/empty3"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="暫無記錄"
android:textColor="@color/gray_dark"
android:textSize="@dimen/font_middle"
android:gravity="center"
/>
</LinearLayout>
</FrameLayout>
http://disanji.net/2011/04/22/android-ui-study-framelayou/