Android开发之 EditText 上的清空按钮

来源:互联网 发布:网络词钓鱼是什么意思 编辑:程序博客网 时间:2024/04/28 23:54

Android开发时很多时候EditText 输入框都需要一些 X 一类的清空按钮,这样就必须重写EditText

public class UserPwdEditText extends EditText {    private final String TAG = "MyEditText";    private Drawable dRight;    private Rect rBounds;    public UserPwdEditText(Context paramContext) {        super(paramContext);        initEditText();    }    public UserPwdEditText(Context paramContext, AttributeSet paramAttributeSet) {        super(paramContext, paramAttributeSet);        initEditText();    }    public UserPwdEditText(Context paramContext,            AttributeSet paramAttributeSet, int paramInt) {        super(paramContext, paramAttributeSet, paramInt);        initEditText();    }    // 初始化edittext 控件    private void initEditText() {        setEditTextDrawable();        addTextChangedListener(new TextWatcher() { // 对文本内容改变进行监听            @Override            public void afterTextChanged(Editable paramEditable) {            }            @Override            public void beforeTextChanged(CharSequence paramCharSequence,                    int paramInt1, int paramInt2, int paramInt3) {            }            @Override            public void onTextChanged(CharSequence paramCharSequence,                    int paramInt1, int paramInt2, int paramInt3) {                UserPwdEditText.this.setEditTextDrawable();            }        });    }    // 控制图片的显示    public void setEditTextDrawable() {        if (getText().toString().length() == 0) {            setCompoundDrawables(null, null, null, null);        } else {            setCompoundDrawables(null, null, this.dRight, null);        }    }    @Override    protected void onDetachedFromWindow() {        super.onDetachedFromWindow();        this.dRight = null;        this.rBounds = null;    }    /**     * 添加触摸事件 点击之后 出现 清空editText的效果     */    @Override    public boolean onTouchEvent(MotionEvent paramMotionEvent) {        if ((this.dRight != null) && (paramMotionEvent.getAction() == 1)) {            this.rBounds = this.dRight.getBounds();            int i = (int) paramMotionEvent.getRawX();// 距离屏幕的距离            // int i = (int) paramMotionEvent.getX();//距离边框的距离            if (i > getRight() - 3 * this.rBounds.width()) {                setText("");                paramMotionEvent.setAction(MotionEvent.ACTION_CANCEL);            }        }        return super.onTouchEvent(paramMotionEvent);    }    /**     * 显示右侧X图片的     *      * 左上右下     */    @Override    public void setCompoundDrawables(Drawable paramDrawable1,            Drawable paramDrawable2, Drawable paramDrawable3,            Drawable paramDrawable4) {        if (paramDrawable3 != null)            this.dRight = paramDrawable3;        super.setCompoundDrawables(paramDrawable1, paramDrawable2,                paramDrawable3, paramDrawable4);    }}
布局文件是这样的  要有一个图片<com.xinzhifu.view.UserPwdEditText                android:id="@+id/login_edtPwd"                android:layout_width="match_parent"                android:layout_height="55dp"                android:background="@null"                android:drawableRight="@drawable/ic_delete"                android:ems="10"                android:hint="@string/pwd"                android:inputType="textPassword"                android:paddingLeft="15dp"                android:paddingRight="15dp"                android:singleLine="true"                android:textColorHint="#999999"                android:textSize="15sp" />
0 0