如何在EditText框內(nèi)嵌入Button呢?有很多人希望能在一個EditText中嵌入一個Button,用作搜索、清除等作用,下面是一位網(wǎng)友分享的一個比較簡單的方案。
以下實(shí)現(xiàn)的是將Button放在EditText的右部。首先聲明了一個類ButtonEditText繼承自EditText,然后定義了一個Button,以及控制這個Button的高度、寬度的padding。高度的padding是指Button和EditText上下邊框的距離,而寬度的padding是指Button和EditText右邊框的距離。
然后根據(jù)父類定義構(gòu)造函數(shù)。init()函數(shù)是定義來初始化Button的,這里初始化Button比較簡單,只設(shè)置了一個Text和ClickListener,如果需要更加復(fù)雜的初始化工作,可能需要用到自定義的attribute,詳見這篇文章http://sxote.blog.51cto.com/885634/1112857。
為了實(shí)現(xiàn)Button的點(diǎn)擊效果,必須要把Touch的事件傳遞給Button,所以必須要重載dispatchTouchEvent()函數(shù),如下:
上面的對event.getY() 和event.getX()的判斷就是為了定位Touch事件發(fā)生在Button上,如果發(fā)生在Button上,就給它傳遞Touch事件。否則就用EditText的dispatchTouchEvent()函數(shù)。如果你需要對Button做一些高級的效果,這里可能還需要判斷Button是否需要ACTION_OUTSIDE/ACTION_CANCEL消息。
下面就需要對Button的顯示進(jìn)行處理了。顯示首先是measure()、layout(),然后是draw(),缺一不可。重載如下:
最后的效果如下圖所示:
附完整源文件: