- /**
- * @类名:ClearableEditText
- * @功能描述:
- * @作者: William Xu
- * @创建日期:2013-4-13
- * @修改人:
- * @修改日期:
- * @修改备注:
- * @版本号:1.0
- */
- public class ClearableEditText extends EditText implements
- OnFocusChangeListener, TextWatcher {
- private Drawable xD;
- public ClearableEditText(Context context) {
- super(context);
- init();
- }
- public ClearableEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
- public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init();
- }
- private void init() {
- xD = getCompoundDrawables()[2];
- if (xD == null) {
- xD = getResources()
- .getDrawable(R.drawable.search_clear);
- }
- xD.setBounds(0, 0, xD.getIntrinsicWidth(), xD.getIntrinsicHeight());
- setClearIconVisible(false);
- super.setOnFocusChangeListener(this);
- addTextChangedListener(this);
- }
- @Override
- public void setOnFocusChangeListener(OnFocusChangeListener f) {
- this.f = f;
- }
- private OnFocusChangeListener f;
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- if (getCompoundDrawables()[2] != null) {
- if (event.getAction() == MotionEvent.ACTION_UP) {
- boolean tappedX = event.getX() > (getWidth()
- - getPaddingRight() - xD.getIntrinsicWidth());
- if (tappedX) {
- setText("");
- event.setAction(MotionEvent.ACTION_CANCEL);
- }
- }
- }
- return super.onTouchEvent(event);
- }
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (hasFocus) {
- setClearIconVisible(getText().length() > 0);
- } else {
- setClearIconVisible(false);
- }
- if (f != null) {
- f.onFocusChange(v, hasFocus);
- }
- }
- protected void setClearIconVisible(boolean visible) {
- Drawable x = visible ? xD : null;
- setCompoundDrawables(getCompoundDrawables()[0],
- getCompoundDrawables()[1], x, getCompoundDrawables()[3]);
- }
- @Override
- public void onTextChanged(CharSequence s, int start, int count,
- int after) {
- setClearIconVisible(s.length() > 0);
- }
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
- }
- @Override
- public void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
- }
- }
本文转自william_xu 51CTO博客,原文链接:http://blog.51cto.com/williamx/1195051,如需转载请自行联系原作者