如何在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(),缺一不可。重載如下:
最后的效果如下圖所示:
附完整源文件: