Android 笔记:android自定义View之自定义EditText(添加删除功能)

来源:互联网 发布:支付宝找回淘宝密码 编辑:程序博客网 时间:2024/05/18 01:24

转自sunday_luck的博客

为了更高的复用和减少代码的冗余所以按照用户体验师的要求自定义了一个EditText。

     EditTextWithDel组件的功能如下:    1、在没用内容的时候显示不可用的图片状态,在有内容的时候显示可用的图片状态;    2、在有内容的时候点击删除按钮可以删除EditText中的内容;

组件的代码如下:

package com.sunday.customs;  import com.example.customs.R;  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;  /**  * @author sunday  * 2013-12-04  */  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);          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 - 50;              if(rect.contains(eventX, eventY))                   setText("");          }          return super.onTouchEvent(event);      }      @Override      protected void finalize() throws Throwable {          super.finalize();      }  }  

效果图如下:
这里写图片描述
最后放上demo的地址:
demo:http://download.csdn.net/detail/ff20081528/6657423

0 0
原创粉丝点击