天天看点

使用FrameLayout应该注意的地方

先来看官方文档的定义: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/