`

使用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/
分享到:
评论
1 楼 weimei789 2016-03-04  
我想问下,我设置view的layout_gravity属性  margin的所有属性也是可以生效的啊,难道是我理解错了?

相关推荐

    TabHost+FrameLayout实现底部选项卡

    TabWidget是显示选项卡的地方,而FrameLayout则用于动态替换和显示各个选项卡的内容。 步骤一:设置TabHost 在布局文件中,创建一个TabHost,并为其设置一个ID为"@android:id/tabhost",这是TabHost的标准ID。接着...

    Android TabHost组件使用方法详解

    TabWidget是显示标签的地方,而FrameLayout用于填充每个标签页对应的内容。`layout_weight=1`设置使得内容区域占据剩余空间,确保了内容区域在屏幕上的适配。 接着,我们来看另一个布局文件`inner.xml`,这个布局与...

    TabHost选项卡

    `TabWidget`是显示选项卡的地方,而`FrameLayout`则是用于展示每个选项卡内容的区域。创建`TabHost`界面的基本步骤如下: 1. **初始化TabHost**: 首先,你需要通过`TabHost.TabSpec`来定义每个选项卡,并添加到`...

    YCRedDotView-自定义红点控件,不用修改之前的代码,完全解耦,即可以设置红点数字控件,使用十分方便。可以支持设置在TextView,Button,LinearLayout,RelativeLayout,TabLayout等等控件上…….zip

    有些红点View,需要你在布局中设置,要是很多地方有设置红点操作,则比较麻烦。而该案例不需要改变你之前的任何代码,只是需要按照步骤即可设置红点。设置红点view到你的控件的逻辑操作代码如下所示。如果控件父布局...

    Android 中 TabHost与ViewPager结合实现首页导航效果

    `TabWidget` 是`TabHost`的一部分,用来显示各个标签,而`FrameLayout` 则是用来放置各个标签页内容的地方。 在实现过程中,以下几点需要注意: 1. **设置ID**:`TabHost`、`TabWidget`和`FrameLayout`都需要设置...

    Android-TabHost.rar_android_android tabhost_tabhost_tabhost andr

    TabWidget是显示页签的地方,而FrameLayout(通常称为`android.R.id.tabcontent`)是用来放置每个标签对应的内容视图的。 1. **初始化TabHost** 在Activity的`onCreate()`方法中,你需要初始化TabHost并设置其ID为...

    Android 滑动翻页源码

    2. onDoubleTapEvent(MotionEvent e):通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up...

    Android 滑动翻页源码.zip

    2. onDoubleTapEvent(MotionEvent e):通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up...

    可以横向拖动的TabHost.zip

    `TabWidget` 显示标签,而 `FrameLayout`(也称为 `android:id/tabcontent`)是用于显示与每个标签相关联的视图的地方。 在标准的`TabHost` 实现中,标签的切换通常是通过点击实现的。然而,为了实现横向拖动的效果...

    TabHost标签

    2. **FrameLayout**:通常称为`content`或`android:id/tabcontent`,这是显示与每个标签关联的实际内容的地方。当用户点击一个标签时,`TabHost`会在这个区域内加载对应的视图。 下面我们将详细探讨如何使用`...

    TabActivity之间跳转、传值

    7. **注意事项**:在进行`TabActivity`的跳转和传值时,要注意内存管理,避免内存泄漏。同时,对于数据的传递,确保遵循安全性和隐私原则,不要在不安全的地方存储敏感信息。 以上就是关于`TabActivity`之间跳转和...

    动态生成tabHost

    注意,随着Android版本的发展,TabHost逐渐被更现代的导航组件(如ViewPager和BottomNavigationView)取代,但在一些旧项目或特定需求下,TabHost仍然具有其独特的价值。在实际开发中,要根据项目需求和技术发展趋势...

    FragmentTabHost示例

    1. **TabWidget**:显示Tab标签的地方。 2. **FrameLayout**:用于显示被选中的`Fragment`内容。 ### 创建`FragmentTabHost` 首先,你需要在布局文件中定义一个`FragmentTabHost`,并设置其ID为`android.R.id....

    单击水波效果

    将自定义的水波View添加到项目的XML布局文件中,并在需要的地方使用它。 通过以上步骤,我们可以实现一个基本的单击水波效果。对于初学者来说,理解这个过程不仅可以帮助他们掌握Android动画的基本原理,还能提升...

    Android之BadgeView实现在控件上显示小标签功能源码.zip

    - 为了定位到目标控件(比如一个ImageView),可以使用`RelativeLayout`或`FrameLayout`作为父容器,然后将BadgeView和目标控件作为子视图添加。通过设置`android:layout_alignTop`、`android:layout_alignBottom`...

    Android SurfaceView添加组件view不被组件覆盖.zip

    7. **使用FrameBufferObject(FBO)**:在某些情况下,可以使用OpenGL ES的FBO来绘制SurfaceView的内容,然后在需要的地方绘制其他子View。这需要对OpenGL ES有深入的理解。 以上就是解决Android SurfaceView添加组件...

    Android UI开发中所遇到的各种坑

    如果方向设为垂直,则 left 与 right 是没有效果的,这时如果想放在靠右的地方,可以使用 space 标签,将宽度设为 0dp,将 layout weight 设为 1。 Android UI 开发中所遇到的各种坑是非常重要的,需要开发者们在...

    按钮的拖动

    - 多线程处理:如果在主线程之外进行视图更新,确保在合适的地方调用`DispatchQueue.main.async`以保持界面流畅。 - 事件冲突:确保拖动操作不会与按钮的点击事件或其他手势冲突。 通过以上步骤,你可以在Android或...

    通过Fragment+TabHost实现底部选项卡

    `TabHost`将包含`TabWidget`(底部的选项卡)和`FrameLayout`(显示内容的地方)。 ```xml android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"&gt; ...

    surfaceviewbackground:SurfaceView播放视频作为背景(仿Keep效果)

    通过以上的讲解,你应该对如何使用SurfaceView播放视频作为背景有了深入的理解。实践是检验真理的唯一标准,所以不妨尝试一下"surfaceviewbackground-master"项目,亲手实现这个效果,加深理解。

Global site tag (gtag.js) - Google Analytics