package org.cczone.views; 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.view.MotionEvent; import android.view.View; import android.widget.EditText; import org.cczone.praise.R; /** * Created by Administrator on 2015/3/12. */ public class ClearEditText extends EditText implements View.OnFocusChangeListener{ private Context context; private Drawable imgEnable; public ClearEditText(Context context) { super(context); this.context = context; inti(); } public ClearEditText(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; inti(); } public ClearEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; inti(); } @Override public void onFocusChange(View view, boolean b) { if(hasFocus()) { setDrawable(); }else { setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); } } private void inti(){ setSingleLine(true); setPadding(0,0,20,0); imgEnable = context.getResources().getDrawable(R.drawable.clear); addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { setDrawable(); } }); setDrawable(); } public void setDrawable(){ if(length() == 0) { setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); }else { setCompoundDrawablesWithIntrinsicBounds(null, null, imgEnable, null); } } @Override protected void finalize() throws Throwable { super.finalize(); } @Override public boolean onTouchEvent(MotionEvent event) { if(imgEnable != null && event.getAction() == MotionEvent.ACTION_UP) { int x = (int) event.getX() ; //判断触摸点是否在水平范围内 boolean isInnerWidth = (x > (getWidth() - getTotalPaddingRight())) && (x < (getWidth() - getPaddingRight())); //获取删除图标的边界,返回一个Rect对象 Rect rect = imgEnable.getBounds(); //获取删除图标的高度 int height = rect.height(); int y = (int) event.getY(); //计算图标底部到控件底部的距离 int distance = (getHeight() - height) /2; //判断触摸点是否在竖直范围内(可能会有点误差) //触摸点的纵坐标在distance到(distance+图标自身的高度)之内,则视为点中删除图标 boolean isInnerHeight = (y > distance) && (y < (distance + height)); if(isInnerWidth && isInnerHeight) { setText(""); } } return super.onTouchEvent(event); } }
自定义可删除全部内容的EditText
最新推荐文章于 2022-07-22 11:13:01 发布