带删除功能的EditText
来源:互联网 发布:创建oracle11g数据库 编辑:程序博客网 时间:2024/04/28 00:05
Android带删除功能的EditText在输入信息时很常见,尤其在注册登录界面,其实原理比较简单,根据设置EditText的右边的drawable来进行实现。先来看效果图吧:
删除原理示意图如下:
其原理是当按下图片区域的时对触摸事件进行处理,就是输入的文本清空,就可以达到了删除功能。在onTouchEvent中进行判断触摸位置是否落在:(4) - (3) 与 (4) - (2)之间的距离,即是只要满足条件:
event.getX() > getWidth() - getTotalPaddingRight() && event.getX() < getWidth() - getPaddingRight()
就可以对setText("")进行清空处理。
参考如下:
import android.content.Context;import android.graphics.drawable.Drawable;import android.support.v4.content.ContextCompat;import android.support.v7.widget.AppCompatEditText;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import com.lzq.clearedittextdemo.R;/** * function: 自定义带清楚功能的EditText * */@SuppressWarnings("FieldCanBeLocal")public class ClearEditText extends AppCompatEditText implements View.OnFocusChangeListener{ /** 删除图标 */ private Drawable mClearDrawable; /** 是否有焦点 */ private boolean mFocus; public ClearEditText(Context context) { this(context, null); } public ClearEditText(Context context, AttributeSet attrs) { // 这里构造方法也很重要,不加这个很多属性不能再XML里面定义 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]; //如果EditText右边的删除图标为null则设置默认图标 if (mClearDrawable == null){ mClearDrawable = ContextCompat.getDrawable(getContext(), R.drawable.selector_btn_clear); } mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight()); setClearIconVisible(false); setOnFocusChangeListener(this); addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { setClearIconVisible(charSequence.length() > 0); } @Override public void afterTextChanged(Editable editable) { } }); } /** 设置清除按钮是否可见 */ private void setClearIconVisible(boolean visible){ Drawable right = visible ? mClearDrawable : null; setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]); } /** * 如果有焦点并且输入内容长度 > 0 则删除按钮显示,否则隐藏 * @param view EditText * @param focus 是否聚焦 */ @Override public void onFocusChange(View view, boolean focus) { this.mFocus = focus; setClearIconVisible(mFocus && getText().length() > 0); } /** * 由于不能直接给EditText设置点击事件,所以可以根据点击的位置来处理点击响应 * (editText的宽度 - 删除图标到控件右边的距离 - 图标宽度) 与 (editText的宽度 - 删除图标到控件右边的距离)之间 * @param event 事件 * @return 事件处理 */ @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP){ if (getCompoundDrawables()[2] != null){ boolean touchable = (event.getX() > getWidth() - getTotalPaddingRight()) && (event.getX() < getWidth() - getPaddingRight()); if (touchable){ setText(""); //清空 相当于点击删除图标清除文字处理 } } } return super.onTouchEvent(event); }}
阅读全文
0 0
- 带删除功能的EditText
- 带删除功能的edittext
- 带删除功能的EditText
- EditText带删除功能
- 自定义带删除功能的EditText
- EditText自带删除的功能
- 自带删除功能的EditText
- Android-EditText(自定义带删除功能的EditText)
- Android-EditText 自定义带删除功能的EditText
- Android-EditText(自定义带删除功能的EditText)
- 带删除的EditText
- Android自定义View------带删除功能的EditText
- Android 带删除图标的EditText清除功能小Demo
- 如何自定义一个带删除功能的EditText
- Android带删除的EditText
- 带删除按钮的EditText
- 带删除Icon的EditText
- 带删除按钮的EditText
- JCVideoPlayer使用小结
- Dungeon Master
- R8 STM32 SPI—读写串行 FLASH
- Css基础
- 贪心(Elegant Construction,HDU 5813)
- 带删除功能的EditText
- Java基础语法之接口
- 在vs2017中编写汇编
- 32位操作系统与64位操作系统的区别
- [来源未知]传送
- 利用ROM存储的VGA显示模块
- Intellij idea 删除本地文件时,svn服务器上文件无法删除
- interface
- 关于高并发的处理思路