自定义带有清除功能的EditText不难,网上很多源码。简单来说,就是检测用户touch的位置,如果落在清除图标里面,则触发清除。这个清除图标是通过android:drawRight设置的。在EditText只有一行文本的时候,一切正常。可是如果EditText有多行文本时,清除图标就显示在中间(如下图)。
显然,清除图标显示在右下角更加合理。我定义了一个EditText来实现这个效果。效果图如下。实现思路是,抛弃使用drawRight来显示清除图标。而是直接在onDraw函数中绘制清除图标。这么做是因为drawRight的位置不好控制,看了下TextView的onDraw函数,想要改变drawRight的绘制位置很难。要特别说明的是,我是通过android:drawRight来获得清除图标的,获得之后即把drawRight设为null了,这样可以不用自定义属性了。
完整源码</