在app中经常可以见到这种需求:输入框右侧有一个清空的按钮,点击可以清空当前已输入的内容,方便用户操作。当然使用一个线形布局,左边是输入框,右边是清空按钮,这样组合起来也能实现这种效果,但是如果app里面有多处都有相同的需求,则需要多次复制粘贴,比较麻烦,也不够优雅。所以考虑用自定义控件实现。
因为是在输入框的基础上添加清空的功能,所以考虑直接继承EditText:

右侧的清空按钮则使用drawableRight属性去指定,在init()方法中去获取drawable并设置点击事件:

由于drawable无法直接设置onClickListener(),考虑通过重写onTouchEvent()去实现:

getTotalPaddingRight()这个方法是获取包括right drawable在内的右侧内间距。在该区域的点击事件当作清空去处理。最后一点小优化,在当前edittext有焦点时才显示清空按钮,失去焦点时将按钮隐藏:

设置drawable隐藏可见的方法:

完整代码:https://github.com/huangxshuo/ClearableEditText