自定义带清除功能的EditText
来源:互联网 发布:java官网下载旧版jdk 编辑:程序博客网 时间:2024/06/04 04:58
摘要
- 无论是带清除功能还是可以切换明文/密文的EditText,核心就是判断用户点击的位置是否在清除(切换)的图标位置,然后做出相应的设置就可以了。上效果图:
思路
- 使用EditText自带的DrawableRight属性来设置删除图片;
- 判断点击位置在右侧的图片范围时重置EditText的内容;
- 使用TextWatcher观察EdiText没有text内容的时候隐藏删除图标,有内容则显示。
如何判断点击的位置
- 重写OnTouchEvent方法
- 要判断点击的是右侧的删除图片需要满足2个条件(忽略Y轴方向)
- 点击位置的event.getX()要大于EditText自身宽度减去paddingRight和DrawPadding;
event.getX() > getWidth() - drawableRight.getIntrinsicWidth() - getPaddingRight();
- 点击位置的event.getX()要小于EditText自身宽度减去paddingRight.
event.getX() < getWidth() - getPaddingRight();
- 点击位置的event.getX()要大于EditText自身宽度减去paddingRight和DrawPadding;
完整代码:
public class ClearEditText extends AppCompatEditText implements TextWatcher {public static final String TAG = "ClearEditText";boolean isShow = false;//是否已经显示右侧删除图标public ClearEditText(Context context) { this(context, null);}public ClearEditText(Context context, AttributeSet attrs) { this(context, attrs, 0);}public ClearEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);}@Overridepublic boolean onTouchEvent(MotionEvent event) { Drawable drawableRight = this.getCompoundDrawables()[2]; if (drawableRight != null) {//有右边图标才去相应点击事件 int action = event.getAction(); if (action == MotionEvent.ACTION_UP) { boolean xFlag1 = event.getX() > getWidth() - drawableRight.getIntrinsicWidth() - getPaddingRight(); boolean xFlag2 = event.getX() < getWidth() - getPaddingRight(); if (xFlag1 && xFlag2) { setText(""); } } } return super.onTouchEvent(event);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) { if (TextUtils.isEmpty(s)) { if (isShow) { isShow = !isShow; this.setCompoundDrawables(null, null, null, null); } } else { if (!isShow) { isShow = !isShow; Drawable drawable = this.getResources().getDrawable(R.drawable.right_delete); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); this.setCompoundDrawables(null, null, drawable, null); } }}@Overridepublic void afterTextChanged(Editable s) {}}
使用步骤:
<com.csdnl.www.clearedittext.ClearEditText android:id="@+id/clearEditText" android:layout_width="300dp" android:layout_height="40dp" android:background="#ff0000" android:drawablePadding="10dp" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center_vertical" android:hint="请输入用户名" android:paddingRight="20dp" android:textColor="#fff" android:textColorHint="#fff"/>
Github地址,可直接依赖
如果让你做一个可切换明文和密文的EditText你是否也会了呢?如在使用种遇到问题,欢迎指出,共同交流。谢谢!!!
阅读全文
0 0
- 自定义带清除功能的EditText
- 自定义带清除功能的EditText
- 带清除功能的EditText
- 带清除空能和匹配功能的自定义EditText
- Android自定义EditText带清除功能
- 自定义EditText:带清除按钮的EditText
- 带清除功能的EditText,仿IOS
- android 带清除功能的EditText
- 带清除功能的输入框EditText
- ClearEditText,自带清除功能的EditText
- ClearEditText,自带清除功能的EditText
- 自定义EditText-带清除所有输入按钮的EditText
- Android UI设计之<三>自定义EditText,实现带清除功能的输入框
- 自定义控件(一)--带清除和抖动功能的EditText
- 自定义带删除功能的EditText
- Android 带删除图标的EditText清除功能小Demo
- 实现带清除功能的文本输入框(EditText)
- 【android学习】带清除功能的EditText重写
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- java简单的加密和解密算法
- 1433: [ZJOI2009]假期的宿舍
- Android RecycleView 应用
- 今日的代码鼓励花~
- 自定义带清除功能的EditText
- linux下网络通信客户端(普通)
- 100以内计算
- NOIP2015 Day2 T2 子串
- Android Studio中的Sdk manager介绍
- MST
- python url链接编码问题
- FFT BZOJ3527 [Zjoi2014]力
- Mysql 地区经纬度 查询