[原创]在Framelayout中放置button控件出现的覆盖问题

android Framelayout(帧布局)是很常用的布局,主要用来处理需要多个view叠加显示的情况。

然而在使用中,我发现Framelayout中的Button控件,会挡住所有其他控件,而不论位置和添加顺序如何,这个表现是不正常的,我本机有4.1和5.0两种模拟器,只有5.0有这个问题,因此怀疑是5.0的bug。

下面用一个例子说明:

想要的效果是这样的:  

我选择使用Framelayout来实现,下面一个button,上面一个imageview即可,代码如下:

 1     <FrameLayout
 2         android:layout_width="match_parent"
 3         android:layout_height="wrap_content">
 4
 5
 6             <Button
 7                 android:layout_width="match_parent"
 8                 android:layout_height="wrap_content"
 9                 android:text="立即投资" />
10
11         <ImageView
12             android:layout_width="36dp"
13             android:layout_height="36dp"
14             android:layout_gravity="left|center"
15             android:layout_marginLeft="16dp"
16             android:src="@mipmap/ic_invest_button"
17             android:tint="@color/white" />
18
19     </FrameLayout>

在4.1系统上,工作良好,换到5.0,左边的小图标(imageview)死活不显示,调试了半天才发现是被button的背景遮住了。

imageview是后加入的,按理来说,应该是显示在button上面,而不应该被挡住,所以觉得这应该是5.0的一个bug。

但是咱们也必须得兼容5.0,不能显示异常啊,那咱们自己来解决这个问题吧,因为本项目其他地方也用到了Framelayout,没有出现异常,只有这里异常,对比测试后发现,是button控件的问题,那假如我就用一个容器把button包裹起来,结果会怎么样呢?直接上代码:

 1     <FrameLayout
 2         android:layout_width="match_parent"
 3         android:layout_height="wrap_content">
 4
 5         <RelativeLayout
 6             android:layout_width="match_parent"
 7             android:layout_height="wrap_content">
 8
 9             <Button
10                 android:layout_width="match_parent"
11                 android:layout_height="wrap_content"
12                 android:text="立即投资" />
13
14         </RelativeLayout>
15
16         <ImageView
17             android:layout_width="36dp"
18             android:layout_height="36dp"
19             android:layout_gravity="left|center"
20             android:layout_marginLeft="16dp"
21             android:src="@mipmap/ic_invest_button"
22             android:tint="@color/white" />
23
24     </FrameLayout>

跑起来一看,问题解决了,完美兼容4.0,5.0。只是多了一层嵌套,代码上看略微不优雅。

时间: 2024-08-28 21:33:23

[原创]在Framelayout中放置button控件出现的覆盖问题的相关文章

listView中的button控件获取索引

1.在listitem中初始化button的时候,给该button添加一个setTag方法,将此时的索引值传进去,然后在button的onclick事件中调用view的getTag方法,即可将listitem的索引读出来,代码如下: tagButton.setTag(position); 此处的tagButton就是定义的button,Position是view里边的位置. 2.初始化button的时候通过setTag方法传入一个item的索引值 private OnClickListener 

listView中的button控件获取item的索引

在listview中的listitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认的是listitem中的button会捕获点击事件.那么如果点击listitem中的button怎么才能这个button是在哪一个item中呢,换句话说,就是点击listitem中的button怎么获取该listitem的索引?得到了这个索引的话,item里边的值就相对容易了. 通过如下方法可以实现: 1.在listitem中初始化button的时候,给

Xcode UIView 中的Button 控件的属性和基本用法

  //第一种创建UIButton的方法 //initWhitFrame: UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(110, 100, 100, 30)]; button.backgroundColor = [UIColor redColor]; button.titleLabel.font = [UIFont systemFontOfSize:19.0];//设置按钮的文字大小 button.contentHor

Android中在Button控件上显示倒计时

public class CountdownTimerActivity extends Activity {private TimeCount time;private Button checking;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.la

MFC中动态添加控件----寻找多年的秘籍,吐血推荐

原文作者tianwaik 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器(一般是对话框),这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 相比之下,静态控件不需要调用Create()函数来创建. 而创建动态控件有很大不同,以下以按钮为例,看一下

silverlight中常用的控件

一.布局控件 Canvas面板是一种很基础的布局面板,它支持对其中的控件采用绝对坐标定位.Canvas.Top和Canvas.Left.Canvas.ZIndex附加属性:如果指定了两个控件相对于父容器Canvas同样的边距,则后面声明的控件父覆盖前面声明的控件.这时我们可以使用Canvas.ZIndex属性来改变它们的显示顺序. StackPanel是一种简单的布局面板,它支持用行或列的方式来定位其中包含的控件.StackPanel 常用于安排页面上的一个很小的 UI 部分.默认情况下,Ori

在代码中动态创建控件无法保存状态的问题

在网上找了点资料,算是明白了,这是我觉得有帮助的文章: 原文:http://blog.csdn.net/keleloveni/archive/2007/03/15/1530300.aspx 引文: 今天偶然看到有篇文章谈到了相关的问题,终于又解决了一个自己不是很明白的东西. 页面生命周期中的第一个阶段是实例化,在这个阶段中,自动生成的类会根据页面的 HTML 部分中定义的静态控件构建控件层次结构.构造控件层次结构时,声明性语法中指定的值会赋给添加的每个控件的属性.实例化之后是初始化阶段,在这个阶

在Web中使用Windows控件

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 将Net控件转化为ActiveX控件 1GUID 2实现IObjectSafety接口 3程序集设定 制作安装程序 Web集成 最近做的一个Web版的视频会议项目,需要在网页中播放来自远程摄像头采集的实时视频,我们已经有了播放远程实时视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,ActiveX. 1.将.Net控件转化为ActiveX控件 首先要做的就是将我们的windows视频

【Android的从零单排开发日记】之入门篇(十四)——Button控件+自定义Button控件

    好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把Android这块放在一边了,滚去看PHP的后台框架了(人家只是一个Android实习生,不带这么玩的),学校那边老师布置了一个hibernate的项目,还说我给你们一个月时间,慢慢看,慢慢学习(结果就是在群上发了一大堆的hibernate的视频教程,还真的是慢慢看慢慢学习了,而且视频还是极老的,h