FrameLayout是做什么的?


97

我是编程新手。我使用的是Graphical Layout,然后在读取xml文件时,看到了FrameLayout。然后我搜索了,但是找不到有用的东西。什么是FrameLayout?它有什么作用?



12
是的,我去过那里,但是我找不到可以理解的东西。
阿敏·加塞米

Answers:


194

您可以使用FrameLayout将子视图彼此堆叠,而最新的子视图则堆叠在顶部。在下面的示例中,TextView是最新的,因此它会自动放置在ImageView的顶部。

例如:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/backgroundImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/bitmapie" />

    <TextView
        android:id="@+id/descTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="70dp"
        android:background="@android:color/holo_blue_light"
        android:padding="10dp"
        android:text="TextView placed at the top of the Imageview"
        android:textColor="@android:color/white"
        android:textSize="22sp" />

</FrameLayout>

输出:

在此处输入图片说明


40
我喜欢看代码及其输出。非常感谢!已投票。另外,我喜欢您在那里所做的设计。简单而又非常好!
塔里克

3
非常简单,功能强大但简单的解释-感谢@ojonugwaochalifu!
绝对编码员

2
很好的解释。我也阅读了官方页面上的“开发人员”说明,并认为“在顶部”一词的含义更多。您的解释使我“点击顶部”的3D本质得到了点击,现在我明白了。非常感谢您:)
Slartibartfast

1
@ojonugwaochalifu:感谢您的解释。我有一个小的查询,我们在这里所做的事情,我们也可以通过相对布局来完成。那么,为什么我们要使用框架布局?
akashPatra

3
是的,它们几乎可以做相同的事情。但是请记住,视图的一种良好设计习惯是对布局使用尽可能少的嵌套。使用FrameLayout时,彼此放置视图所需的嵌套少于使用RelativeLayout时的嵌套。
Ojonugwa Jude Ochalifu,

75

FrameLayout是的最简单的实现ViewGroup。绘制的子视图位于堆栈中,其中最新添加的视图位于顶部。通常,您可以使用以下方法之一或将其组合:

  1. 将单个视图层次结构添加到 FrameLayout
  2. 添加多个子项并用于android:layout_gravity导航

在此处输入图片说明

另一种流行的使用方法FrameLayout

  • 作为一个Fragment容器
  • 作为您习俗的祖先 ViewGroup

23

您可以将该单词frame视为普通相框。你用那个框架做什么?您可以将照片从一个框顶到另一个框。就像FrameLayout我们可以将视图(任何布局或小部件(如按钮,文本,图像等))放置在其他视图的顶部一样,因为@ojonugwa向您显示了图像的textview顶部。


很好,我一直以为它iframe来自Web开发。感谢您最简单的解释。
塔里克

19

确定要用Google搜索吗?

框架布局旨在遮挡屏幕上的某个区域以显示单个项目。通常,应使用FrameLayout来保存单个子视图,因为在子视图彼此不重叠的情况下,难以以可扩展到不同屏幕尺寸的方式组织子视图。

不过,您可以使用android:layout_gravity属性将多个子项添加到FrameLayout并通过将重力分配给每个子项来控制它们在FrameLayout中的位置。

FrameLayout的秘诀是如何布置其子级。尽管通常设计为包含一个项目,但它会很乐意将其他元素堆叠在一起。因此,FrameLayout本质上是一种操纵屏幕上视图Z顺序的方法。

这对于从类似HUD的元素到滑动面板到更复杂的动画过渡的UI技巧非常有用。在本文中,我们将为每个示例提供一个示例。

FrameLayout旨在一次显示一个项目。您可以在FrameLayout中包含多个元素,但是每个元素的位置都将基于屏幕的左上角。重叠的元素将显示为重叠。我已经使用FrameLayout创建了一个简单的XML布局,以显示其工作原理。


8
是的,我看到了他们。但是我找不到他们在说什么。
2014年

您可以将其视为相框。基本上,您放置的内容将显示在屏幕的左侧。Learn-android-easily.com/2013/05/frame-layout-in-androis.html
Metehan 2014年

因此,您通常应使用它来显示单个项目。
Metehan 2014年

4

基本上,它将一个视图放在另一个视图之上,例如:

放大图片上的文字

  <FrameLayout>

<ImageView>
<Textview>

  </FrameLayout>

1
nope linearlayout一个接一个地放置...在其上方放置一个框架。.让我们说说像图像上有网格,而在图像上方有一个取消按钮的
感觉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.