如何在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(),缺一不可。重载如下:
最后的效果如下图所示:
附完整源文件:
支持( 0 ) 盖楼(回复)
支持( 0 ) 盖楼(回复)
支持( 0 ) 盖楼(回复)
支持( 0 ) 盖楼(回复)