Android UI之FrameLayout(帧布局)

Android UI之FrameLayout(帧布局)

说明:帧布局会为每个包含其中的组件开辟一个空白区域(称为帧),这些帧是一层层叠加在一起的,有点类似于一层层覆盖贴上去的海报,后面的组件会把前面的组件覆盖住。

FrameLayout有两个比较特殊的常用属性需要注意:

1 android:foreground

对应方法:setForeground(Drawable)
说明:设置帧布局的前景图像,一般为布局添加pressed状态会用到这个属性来指定一个Drawable类型对象。
举个栗子:

<FrameLayout
    android:foreground="@drawable/muogu"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="320dp"
        android:height="320dp"
        android:layout_gravity="center"
        android:background="#3399AA" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="280dp"
        android:height="280dp"
        android:layout_gravity="center"
        android:background="#AA77AA" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="240dp"
        android:height="240dp"
        android:layout_gravity="center"
        android:background="#662288" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="200dp"
        android:height="200dp"
        android:layout_gravity="center"
        android:background="#895511" />
    <ImageView
        android:layout_width="160dp"
        android:layout_height="160dp"
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:src="@drawable/nailiu16" />
</FrameLayout>

技术分享

可以看到设置了foreground为小蘑菇的图片之后,图片直接拉伸占据满了整个FrameLayout,并将FrameLayout中所有的组件都遮盖住了。这就是相对与背景色的前景色的效果。

2 foregroundGravity

对应方法:setForegroundGravity(int)
说明:看名字就知道,肯定是跟前景色摆放有关。没错,这个属性的功能就是定义前景图像的gravity属性,所以这个属性必须配合foreground使用。而其中的可选项更gravity是一样的,可以在我之前的《 Android UI之LinearLayout(线性布局)》中找到属性表。
举个栗子:

<FrameLayout
    android:foreground="@drawable/muogu"
    android:layout_width="fill_parent"
    android:foregroundGravity="bottom|right"
    android:layout_height="fill_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="320dp"
        android:height="320dp"
        android:layout_gravity="center"
        android:background="#3399AA" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="280dp"
        android:height="280dp"
        android:layout_gravity="center"
        android:background="#AA77AA" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="240dp"
        android:height="240dp"
        android:layout_gravity="center"
        android:background="#662288" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:width="200dp"
        android:height="200dp"
        android:layout_gravity="center"
        android:background="#895511" />
    <ImageView
        android:layout_width="160dp"
        android:layout_height="160dp"
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:src="@drawable/nailiu16" />
</FrameLayout>

技术分享

这里的代码更上边的唯一区别就是在FrameLayout中添加了下面这行代码。

android:foregroundGravity="bottom|right"

可以看到前景图像还原到了原有大小,而且按照设置放到了右下角,这样,FrameLayout中的子组件就显示出来了。

附:引用声明

《疯狂Android讲义(第二版)》 李刚 《2.2.3 帧布局》 电子工业出版社

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。