package com.jerome.widget; import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; import com.jerome.lib_song.R; /** * * ClassName:ClearableEditText <br> * Function: 可一键清空的EditText <br> * * @author Jerry * @version * @Date 2013 2013-6-18 下午4:08:43 * * @see */ public class ClearableEditText extends EditText { public String defaultValue = ""; final Drawable clearImg = getResources().getDrawable( R.drawable.edittext_clear); public ClearableEditText(Context context) { super(context); init(); } public ClearableEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public ClearableEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { clearImg.setBounds(0, 0, clearImg.getIntrinsicWidth(), clearImg.getIntrinsicHeight()); manageClearButton(); this.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { ClearableEditText et = ClearableEditText.this; if (et.getCompoundDrawables()[2] == null) return false; if (event.getAction() != MotionEvent.ACTION_UP) return false; if (event.getX() > et.getWidth() - et.getPaddingRight() - clearImg.getIntrinsicWidth()) { et.setText(""); ClearableEditText.this.removeClearButton(); } return false; } }); this.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { ClearableEditText.this.manageClearButton(); } @Override public void afterTextChanged(Editable arg0) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } }); } private void manageClearButton() { if (this.getText().toString().equals("")) removeClearButton(); else addClearButton(); } private void addClearButton() { this.setCompoundDrawables(this.getCompoundDrawables()[0], this.getCompoundDrawables()[1], clearImg, this.getCompoundDrawables()[3]); } private void removeClearButton() { this.setCompoundDrawables(this.getCompoundDrawables()[0], this.getCompoundDrawables()[1], null, this.getCompoundDrawables()[3]); } }