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); } } }
相关文章推荐
- Spring源码深度解析(七)获取Document
- python把元组组合成字典
- reshape函数使用
- MySQL5.6和5.5的一些区别地方
- spring请求流程详解
- docker深入2-使用jenkins镜像
- 如何添加一种新的语言
- 推荐一个图片管理的html模版和简单的js交互
- RBF神经网络与BP神经网络的比较
- mysql慢查询日志使用总结
- 读《商业的本质》
- DL插件化框架
- Linux必会原理之输入网址到看到页面内容原理
- jenkins-基础操作
- Ajax加载HTML、XML、JSON对比分析
- Richfaces 中<rich:modalPanel />开启与关闭方式
- 9-5getAttribute()方法、setAttribute()方法
- MySQL学习笔记(二)
- PLSQL Developer安装、配置、连接oracle数据库
- thinkphp整合系列之phpqrcode生成二维码