您的位置:首页 > 其它

editText带删除按钮

2016-06-30 16:57 148 查看

editText带删除按钮

public class ClearEditText extends EditText implements View.OnFocusChangeListener, TextWatcher {
private Drawable mClearDrawable;
private OnFocusChangeListener mFocusListener;
private TextWatcher mWatcher;

public ClearEditText(Context context) {
this(context, null, 0);
}

public ClearEditText(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.editTextStyle);
}

public ClearEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {
mClearDrawable = getCompoundDrawables()[2];
if (mClearDrawable == null) {
mClearDrawable = getResources().getDrawable(R.drawable.clear_btn);
}
mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());
setClearIconVisible(false);
super.setOnFocusChangeListener(this);
super.addTextChangedListener(this);
}

@Override
public void setOnFocusChangeListener(OnFocusChangeListener l) {
mFocusListener = l;
}

@Override
public void addTextChangedListener(TextWatcher watcher) {
mWatcher = watcher;
}

private void setClearIconVisible(boolean b) {
Drawable right = b ? mClearDrawable : null;
setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
}

public void setClearDrawableVisible(boolean visible) {
if (!visible) {
mClearDrawable = null;
}
}

@Override
public boolean onTouchEvent(MotionEvent event) {
if (getCompoundDrawables()[2] != null) {
if (event.getAction() == MotionEvent.ACTION_UP) {
boolean touchable = event.getX() > getWidth() - getPaddingRight() - mClearDrawable.getIntrinsicWidth()
&& event.getX() < getWidth() - getPaddingRight();
if (touchable) {
setText("");
}
}
}
return super.onTouchEvent(event);
}

@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
if (mFocusListener != null) {
mFocusListener.onFocusChange(v, hasFocus);
}
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (mWatcher != null) {
mWatcher.beforeTextChanged(s, start, count, after);
}
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
boolean visible = getText().length() > 0;
setClearIconVisible(visible);
if (mWatcher != null) {
mWatcher.onTextChanged(s, start, before, count);
}
}

@Override
public void afterTextChanged(Editable s) {
if (mWatcher != null) {
mWatcher.afterTextChanged(s);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: