【Android从零单排系列三十三】《Android布局介绍——FrameLayout》

2023-07-17 20:31:55 浏览数 (2)

前言

小伙伴们,在上文中我们介绍了Android布局AbsoluteLayout,本文我们继续盘点介绍Android开发中另一个常见的布局,帧布局FrameLayout。

一 FrameLayout基本介绍

FrameLayout是Android中的一种布局容器,它允许在单个视图组中重叠放置子视图。FrameLayout会将所有子视图堆叠在同一个位置上,后添加的子视图会覆盖先前添加的子视图。

二 FrameLayout使用方法

1.在XML布局文件中定义FrameLayout:

代码语言:javascript复制
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 添加子视图 -->

</FrameLayout>

2.在FrameLayout中添加子视图: 可以在FrameLayout中添加多个子视图,后添加的子视图会覆盖先前添加的子视图。可以通过设置子视图的属性来调整其位置和大小。

代码语言:javascript复制
<FrameLayout
    ...
    >
    <ImageView
        android:id="@ id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@ id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, World!"
        android:layout_gravity="center" />
</FrameLayout>

3.调整子视图的位置和大小: 可以使用android:layout_gravity属性来指定子视图在FrameLayout中的对齐方式,例如居中、靠左等。还可以使用其他布局参数和属性来调整子视图的位置和大小。

4.在代码中操作FrameLayout和子视图: 在代码中可以通过findViewById()方法获取FrameLayout和子视图的引用,并进行相应的操作,例如设置可见性、更改位置、监听点击事件等

代码语言:javascript复制
FrameLayout frameLayout = findViewById(R.id.frameLayout);
ImageView imageView = findViewById(R.id.imageView);
TextView textView = findViewById(R.id.textView);

// 设置子视图可见性
imageView.setVisibility(View.VISIBLE);
textView.setVisibility(View.GONE);

// 更改子视图的LayoutParams
FrameLayout.LayoutParams layoutParams =
        (FrameLayout.LayoutParams) imageView.getLayoutParams();
layoutParams.width = 200;
layoutParams.height = 200;
imageView.setLayoutParams(layoutParams);

// 监听子视图的点击事件
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 处理点击事件
    }
});

三 FrameLayout常见属性及方法

常见属性:

  • android:foreground:设置前景视图,可以是颜色、Drawable等。
  • android:foregroundGravity:设置前景视图的对齐方式。
  • android:measureAllChildren:指定是否测量所有子视图,默认为false。

常用方法:

  • addView(View child):向FrameLayout中添加子视图。
  • removeView(View child):从FrameLayout中移除指定的子视图。
  • removeAllViews():从FrameLayout中移除所有子视图。
  • getChildAt(int index):获取指定位置的子视图。
  • getChildCount():获取子视图的数量。
  • bringChildToFront(View child):将指定的子视图置于顶层。
  • setForeground(Drawable drawable):设置前景视图。
  • setForegroundGravity(int gravity):设置前景视图的对齐方式。
  • setMeasureAllChildren(boolean measureAll):设置是否测量所有子视图。

四 FrameLayout简单案例

下面是一个简单的FrameLayout案例,展示了如何在FrameLayout中添加和切换不同的子视图:

代码语言:javascript复制
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@ id/imageView"
        android:src="@drawable/image1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@ id/textView"
        android:text="Hello, World!"
        android:textSize="24sp"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
</FrameLayout>

这个布局文件中包含一个FrameLayout作为父容器,其中有一个ImageView和一个TextView作为子视图。ImageView显示一张图片,TextView显示文本内容。

然后,在代码中可以通过findViewById()方法获取FrameLayout和子视图的引用,并进行操作,例如切换不同的子视图:

代码语言:javascript复制
FrameLayout frameLayout = findViewById(R.id.frameLayout);
ImageView imageView = findViewById(R.id.imageView);
TextView textView = findViewById(R.id.textView);

// 切换到ImageView
frameLayout.bringChildToFront(imageView);

// 或者切换到TextView
frameLayout.bringChildToFront(textView);

上述代码演示了如何使用bringChildToFront()方法将指定的子视图置于顶层,从而实现在FrameLayout中切换不同的子视图。

五 总结

总结来说,FrameLayout是一种简单且灵活的布局容器,适用于在单个位置上重叠显示不同的子视图。

0 人点赞