Android开发之 EditText 上的清空按钮
2016-05-13 11:56
561 查看
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" />
相关文章推荐
- Android EditText 文本框实现搜索和清空效果
- Android进阶之路 - EditText一键清除内容
- Android studio的项目名称变成绿色的解决方法
- Android时间选择器
- Android 安全综述
- Android 错误提示:Conversion to Dalvik format failed with error 1 解决办法
- android获取gallery中的图片以及调用系统相机
- 终结Android项目的R文件报错问题
- Android趣味小实例—涂鸦画板
- android 控制软键盘 在开始时候 不出现
- Cardboard虚拟与现实Android Demo
- Android 开发之AsyncTask使用解析
- Android Studio 快捷键使用技巧(三)
- Android Dev Intro - Android ADB Command Examples
- 个推推送Android问题检测
- Android创建本地数据可简单操作
- Program "D:\AndroidDevelopment\android-ndk-r9\ndk-build.cmd" not found in PATH
- Android 图文弹幕 不叠加 不丢失
- Android屏幕适配(二)多分辨率布局适配策略
- Android学习小记----监听电量的变化(不能静态注册的广播)