FrameLayout布局(帧布局)

本文详细解释了FrameLayout布局的基本概念及其在Android应用开发中的使用方法,包括如何通过layout_gravity属性和margin属性调整子视图的位置。通过实例演示了不同属性设置下子视图的不同布局效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是FrameLayout布局?

FrameLayout布局是最简单的布局方式,所有添加到这个布局中的视图都是以层叠的方式显示。第一个添加到布局中视图显示在最底层,最后一个被放在最顶层。上一层的视图会覆盖下一层的视图,因此该布局类似于堆栈布局。注意点:a.默认对其方式是左上角对其。b.若要设置子视图的位置,要设置layout_gravity属性值。

2.FrameLayout如何设置其子视图(例如ImageView)的位置?

通过layout_gravity设定值,再配合layout_marginTop,layout_marginLeft来设置位置。

举例,下面程序结果截图中,有4幅图:第一层图天空大背景,第二层图是鸟图,第三层图是观音菩萨图,第四层图是汽车图。若不设置ImageView的位置,则此四幅图都将默显示在左上角,并且第一层图在最下面,第四层图在最上面。要实现图中四幅图的位置效果,则分别对应以下设置:

a. 第一层天空背景图 : layout_gravity="center"

b. 第二层鸟图 : layout_gravity = "center" layout_marginTop="-70dp" (注意:此处是负数,因为 layout_gravity = "center" 表示水平和垂直方向上居中,基准线为视图水平和垂直方向的中点,因为鸟在基准线的上方向(负方向),所以为负数)

c. 第三层观音菩萨图 :layout_gravity="top" layout_marginTop="20dp" layout_marginLeft="20dp' (注意:layout_gravity="top" 表示垂直方向顶端对齐,而水平方向是默认左对齐)

d. 第四层汽车图 : layout_gravity="center" layout_marginTop="40dp" (对应第二层鸟图的分析,就很容易理解,汽车在基准线下方向(正方向),所以为负数。并且注意:此处的基准线不是屏幕的最上方,而是水平和垂直方向各自的中心线)

以上的分析,请参考下图实际程序运行结果图和视图代码。

--------------------------------------------------------------------------------------------------------------------------------


程序运行结果图:

\


<frameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <imageview
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/sky2" >

        <imageview
            android:layout_width="40dp"
            android:layout_height="26dp"
            android:layout_gravity="center"
            android:layout_margintop="-70dp"
            android:background="@drawable/bird" >

            <imageview
                android:layout_width="75dp"
                android:layout_height="98dp"
                android:layout_gravity="top"
                android:layout_marginleft="20dp"
                android:layout_margintop="20dp"
                android:background="@drawable/guanyinpusa" >

                <imageview
                    android:layout_width="80dp"
                    android:layout_height="50dp"
                    android:layout_gravity="center"
                    android:layout_margintop="40dp"
                    android:background="@drawable/car" >
                </imageview>
            </imageview>
        </imageview>
    </imageview>

</frameLayout>
其他实例:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/big"
        android:textColor="@color/red"
        android:textSize="60sp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/middle"
        android:textColor="@color/blue"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/samll"
        android:textColor="@color/black"
        android:textSize="20sp" />

</FrameLayout>


### 关于 FrameLayout 帧布局 #### 定义与初始化 `FrameLayout` 是一种特殊的布局管理器,在 Android 应用程序中用于创建重叠视图的效果。通过 `findViewById()` 方法可以获取到定义在 XML 文件中的 `FrameLayout` 对象实例[^1]。 ```java FrameLayout frame = (FrameLayout) findViewById(R.id.mylayout); ``` #### 主要属性说明 对于 `FrameLayout` 来说,有几个重要的属性可以帮助开发者更好地控制其外观: - **android:foreground** 设置该帧布局容器的前景图像。此功能允许在一个简单的背景上叠加复杂的图形元素,从而实现更丰富的视觉效果[^2]。 - **android:foregroundGravity** 控制上述提到的前景图片的具体位置。例如,当希望将前景放置于右下角时,则可指定如下参数值: ```xml android:foregroundGravity="right|bottom" ``` 值得注意的是,虽然有提及 `android:orientation` 和其他一些通用属性,但实际上这些并不是专属于 `FrameLayout` 的特性;相反,它们更多见于像 `LinearLayout` 这样的线性排列型布局组件中[^3]。 #### 示例代码展示 下面给出一段完整的 Java 代码片段以及对应的 XML 配置来演示如何使用 `FrameLayout` 创建一个带有前景图标的界面部分: XML配置文件(activity_main.xml): ```xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mylayout" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 背景 --> <ImageView android:src="@drawable/background_image" android:scaleType="centerCrop" android:layout_width="match_parent" android:layout_height="200dp"/> <!-- 前景图标 --> <ImageView android:src="@drawable/foreground_icon" android:contentDescription="@string/icon_description" android:layout_gravity="right|bottom" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </FrameLayout> ``` Java端操作(MainActivity.java): ```java import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.FrameLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FrameLayout frame = (FrameLayout)findViewById(R.id.mylayout); // 可在此处继续添加逻辑处理... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值