Android EditText 自定义带删除按钮
来源:互联网 发布:数据透视表有什么作用 编辑:程序博客网 时间:2024/05/10 17:36
EditText里面带删除按钮在各种App里面已经很常见了,如下:
所需的图片资源:
下面直接贴上全部代码:
public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher { private Drawable mClearDrawable; private boolean hasFoucs; public ClearEditText(Context context) { this(context, null); } public ClearEditText(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.editTextStyle); } public ClearEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { // 获取EditText的DrawableRight,假如没有设置我们就使用默认的图片 mClearDrawable = getCompoundDrawables()[2]; if (mClearDrawable == null) { mClearDrawable = getResources().getDrawable( R.drawable.nickname_delete); } mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight()); setClearIconVisible(false); setOnFocusChangeListener(this); addTextChangedListener(this); } /** * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 当我们按下的位置 在 EditText的宽度 - * 图标到控件右边的间距 - 图标的宽度 和 EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑 */ @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); //监听手指的按下、滑动、抬起来达到图片的点击,按住效果 switch (action) { case MotionEvent.ACTION_DOWN: if (getCompoundDrawables()[2] != null && getText().length() > 0) { boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight()) && (event.getX() < ((getWidth() - getPaddingRight()))); if (touchable) { setIconChange(R.drawable.nickname_delete2); } } break; case MotionEvent.ACTION_MOVE: if (getCompoundDrawables()[2] != null && getText().length() > 0) { boolean touchable = (event.getX() > (getWidth() - getTotalPaddingRight()) && (event .getX() < ((getWidth() - getPaddingRight())))) && (event.getY() > 0 && event.getY() < getHeight() + 100); if (touchable) { setIconChange(R.drawable.nickname_delete2); } else { setIconChange(R.drawable.nickname_delete); } } break; case MotionEvent.ACTION_UP: if (getCompoundDrawables()[2] != null && getText().length() > 0) { setIconChange(R.drawable.nickname_delete); boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight()) && (event.getX() < ((getWidth() - getPaddingRight()))) && (event.getY() > 0 && event.getY() < getHeight()); if (touchable) { this.setText(""); } } break; } return super.onTouchEvent(event); } /** * 当ClearEditText焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏 */ @Override public void onFocusChange(View v, boolean hasFocus) { this.hasFoucs = hasFocus; if (hasFocus) { setClearIconVisible(getText().length() > 0); } else { setClearIconVisible(false); } } /** * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去 * * @param visible */ protected void setClearIconVisible(boolean visible) { Drawable right = visible ? mClearDrawable : null; setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]); } /** * 设置清除图标的点击效果变化 */ private void setIconChange(int res) { mClearDrawable = getResources().getDrawable(res); mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight()); setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], mClearDrawable, getCompoundDrawables()[3]); } /** * 当输入框里面内容发生变化的时候回调的方法TextWatcher */ @Override public void onTextChanged(CharSequence s, int start, int count, int after) { if (hasFoucs) { //当edittext里面有内容时显示删除图标 setClearIconVisible(s.length() > 0); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { }}
注释已经写的差不多了,这里就不多说了。使用方法(跟正常EditText一样使用):
在xml中:
<控件所在包路径.ClearEditText android:id="@+id/clear_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="11" android:hint="请输入您的手机号" android:inputType="numberDecimal" android:maxEms="11" android:maxLength="11" android:paddingBottom="12dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="12dp" android:singleLine="true" android:text="" android:textColor="#000000" android:textColorHint="#bbbbbb" android:textSize="16sp" />
0 0
- Android EditText 自定义带删除按钮
- android自定义控件(组合控件)--带删除按钮的EditText
- Android自定义右边带删除按钮的EditText
- Android自定义带删除按钮的输入框EditText
- 自定义带删除按钮的EditText
- 自定义EditText(带删除按钮)
- 自定义带删除按钮的EditText
- 自定义控件 带删除按钮的EditText
- [Android]带删除按钮的EditText
- Android中EditText带删除按钮
- editText带删除按钮
- 自定义View之自定义EditText带删除内容按钮控件
- Android 实现自定义自带删除按钮的EditText(带有搜索接口)
- 自定义控件 --- DeletableEditText带删除按钮的EditText
- 自定义带删除按钮的EditText搜索框
- 自定义带删除按钮的 Edittext 并伴随动画效果
- Android-EditText(自定义带删除功能的EditText)
- Android-EditText 自定义带删除功能的EditText
- Windows下面如何安装Beautiful Soup
- 常见的排序算法C++实现
- OPlayer
- GridView之BaseAdapter的用法简单案例(二)【子元素item的高度暂时不知道控制】
- 剑指offer-面试题36:数组中的逆序对
- Android EditText 自定义带删除按钮
- Java时间日期工具类
- Android高效加载大图、多图解决方案,有效避免程序OOM
- iOS 如何让你的应用支持通过iTunes可以与应用文件共享(可以通过iTunes向documents文件夹下导入文件)
- 利用Java Apache POI 生成Word文档
- Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null
- 【js】:利用javascript打开网页
- 前端常用框架
- 记录一次CI错误500