1 import android.content.Context; 2 import android.graphics.Rect; 3 import android.graphics.drawable.Drawable; 4 import android.text.Editable; 5 import android.text.TextWatcher; 6 import android.util.AttributeSet; 7 import android.util.Log; 8 import android.view.MotionEvent; 9 import android.widget.EditText; 10 11 12 public class EditTextWithDel extends EditText { 13 private final static String TAG = "EditTextWithDel"; 14 private Drawable imgInable; 15 private Drawable imgAble; 16 private Context mContext; 17 18 public EditTextWithDel(Context context) { 19 super(context); 20 mContext = context; 21 init(); 22 } 23 24 public EditTextWithDel(Context context, AttributeSet attrs, int defStyle) { 25 super(context, attrs, defStyle); 26 mContext = context; 27 init(); 28 } 29 30 public EditTextWithDel(Context context, AttributeSet attrs) { 31 super(context, attrs); 32 mContext = context; 33 init(); 34 } 35 36 private void init() { 37 // 灰色叉号 38 imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray); 39 // 带色叉号 40 imgAble = mContext.getResources().getDrawable(R.drawable.delete); 41 addTextChangedListener(new TextWatcher() { 42 @Override 43 public void onTextChanged(CharSequence s, int start, int before, int count) {} 44 @Override 45 public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 46 @Override 47 public void afterTextChanged(Editable s) { 48 setDrawable(); 49 } 50 }); 51 setDrawable(); 52 } 53 54 //设置删除图片 55 private void setDrawable() { 56 if(length() < 1) 57 setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null); 58 else 59 setCompoundDrawablesWithIntrinsicBounds(null, null, imgAble, null); 60 } 61 62 // 处理删除事件 63 @Override 64 public boolean onTouchEvent(MotionEvent event) { 65 if (imgAble != null && event.getAction() == MotionEvent.ACTION_UP) { 66 int eventX = (int) event.getRawX(); 67 int eventY = (int) event.getRawY(); 68 Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY); 69 Rect rect = new Rect(); 70 getGlobalVisibleRect(rect); 71 rect.left = rect.right - 50; 72 if(rect.contains(eventX, eventY)) 73 setText(""); 74 } 75 return super.onTouchEvent(event); 76 } 77 78 @Override 79 protected void finalize() throws Throwable { 80 super.finalize(); 81 } 82 83 }
1 <com.EditTextWithDel
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content"
4 android:layout_margin="20dp"
5 android:hint="输入"
6 android:padding="7dp"
7 android:singleLine="true" />