如何在EditText框内嵌入Button

作者: 不详 2013/1/11 14:48:13

如何在EditText框内嵌入Button呢?有很多人希望能在一个EditText中嵌入一个Button,用作搜索、清除等作用,下面是一位网友分享的一个比较简单的方案。

以下实现的是将Button放在EditText的右部。首先声明了一个类ButtonEditText继承自EditText,然后定义了一个Button,以及控制这个Button的高度、宽度的padding。高度的padding是指Button和EditText上下边框的距离,而宽度的padding是指Button和EditText右边框的距离

然后根据父类定义构造函数。init()函数是定义来初始化Button的,这里初始化Button比较简单,只设置了一个Text和ClickListener,如果需要更加复杂的初始化工作,可能需要用到自定义的attribute,详见这篇文章http://sxote.blog.51cto.com/885634/1112857

为了实现Button的点击效果,必须要把Touch的事件传递给Button,所以必须要重载dispatchTouchEvent()函数,如下:

上面的对event.getY() 和event.getX()的判断就是为了定位Touch事件发生在Button上,如果发生在Button上,就给它传递Touch事件。否则就用EditText的dispatchTouchEvent()函数。如果你需要对Button做一些高级的效果,这里可能还需要判断Button是否需要ACTION_OUTSIDE/ACTION_CANCEL消息

下面就需要对Button的显示进行处理了。显示首先是measure()、layout(),然后是draw(),缺一不可。重载如下:

最后的效果如下图所示:

附完整源文件:

特别推荐

玩家留言 跟帖评论
第 4 楼 本机地址CZ88.NET 网友 客人 发表于: 2017/5/26 14:44:30
能接收到点击事件,但是看不到按钮

支持( 0 ) 盖楼(回复)

第 3 楼 本机地址CZ88.NET 网友 客人 发表于: 2017/2/17 14:36:53
再弄个Button的点击事件呗

支持( 0 ) 盖楼(回复)

第 2 楼 北京开心网 网友 客人 发表于: 2015/1/29 19:54:37
啦啦啦啦啦啦啦啦啦啦啦啦我还是搞不出来

支持( 0 ) 盖楼(回复)

第 1 楼 四川铁通 网友 客人 发表于: 2014/10/16 16:40:39
啦啦啦啦啦啦啦啦啦啦啦啦啦

支持( 0 ) 盖楼(回复)

查看更多评论