1. 程式人生 > >Android 帶一鍵刪除按鈕的EditText

Android 帶一鍵刪除按鈕的EditText

1.操作步驟簡單,使用方便

import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.EditText;

public
class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Drawable imgAble; private Context mContext; public EditTextWithDel(Context context) { super(context); mContext = context; init(); } public
EditTextWithDel(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; init(); } public EditTextWithDel(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; init(); } private
void init() { imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray); imgAble = mContext.getResources().getDrawable(R.drawable.delete); //事件監聽 addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { setDrawable(); } }); setDrawable(); } //設定刪除圖片 private void setDrawable() { if(length() < 1){ //表示沒有輸入文字內容時顯示的圖片,個人覺得不需要設定預設圖片 setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null); // setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); }else{ setCompoundDrawablesWithIntrinsicBounds(null, null, imgAble, null); } } // 處理刪除事件 @Override public boolean onTouchEvent(MotionEvent event) { if (imgAble != null && event.getAction() == MotionEvent.ACTION_UP) { int eventX = (int) event.getRawX(); int eventY = (int) event.getRawY(); Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY); Rect rect = new Rect(); getGlobalVisibleRect(rect); rect.left = rect.right - 70; if(rect.contains(eventX, eventY)) setText(""); } return super.onTouchEvent(event); } @Override protected void finalize() throws Throwable { super.finalize(); } /** * 設定晃動動畫 */ public void setShakeAnimation(){ this.startAnimation( shakeAnimation( 5 ) ); } /** * 晃動動畫 * @param counts 1秒鐘晃動多少下 * @return */ public static Animation shakeAnimation(int counts){ Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0); translateAnimation.setInterpolator(new CycleInterpolator(counts)); translateAnimation.setDuration( 1000 ); return translateAnimation; } }

2.效果圖:
這裡寫圖片描述