Android中如何通过自定义EditText实现清除和抖动功能
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"Android中如何通过自定义EditText实现清除和抖动功能",在日常操作中,相信很多人在Android中如何通过自定义EditText实现清除和抖动功能问题上存在疑惑,小编查阅
千家信息网最后更新 2025年11月08日Android中如何通过自定义EditText实现清除和抖动功能
这篇文章主要介绍"Android中如何通过自定义EditText实现清除和抖动功能",在日常操作中,相信很多人在Android中如何通过自定义EditText实现清除和抖动功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android中如何通过自定义EditText实现清除和抖动功能"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
源码如下:
public class ClearEditText extends EditText implements View.OnFocusChangeListener,TextWatcher { / * 删除按钮的引用 */ private Drawable mClearDrawable; / * 控件是否有焦点 */ private boolean hasFoucs; 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 defStyle) { super(context, attrs, defStyle); init(); } private void init() { // 获取EditText的DrawableRight,假如没有设置我们就使用默认的图片,2是获得右边的图片 顺序是左上右下(0,1,2,3,) mClearDrawable = getCompoundDrawables()[2]; if (mClearDrawable == null) { // throw new // NullPointerException("You can add drawableRight attribute in XML"); mClearDrawable = getResources().getDrawable(R.drawable.icon_clear_input); } mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(),mClearDrawable.getIntrinsicHeight()); // 默认设置隐藏图标 setClearIconVisible(false); // 设置焦点改变的监听 setOnFocusChangeListener(this); // 设置输入框里面内容发生改变的监听 addTextChangedListener(this); } / * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 当我们按下的位置 在 EditText的宽度 - * 图标到控件右边的间距 - 图标的宽度 和 EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑 */ @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) { this.setText(""); } } } 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]); } / * 当输入框里面内容发生变化的时候回调的方法 */ @Override public void onTextChanged(CharSequence s, int start, int count, int after) { if (hasFoucs) { setClearIconVisible(s.length() > 0); } } @Override public void beforeTextChanged(CharSequence s, int start, int count,int after) { } @Override public void afterTextChanged(Editable s) { } / * 设置晃动动画 */ public void setShakeAnimation() { this.startAnimation(shakeAnimation(5)); } / * 晃动动画 * * @param counts * 1秒钟晃动多少下 * @return */ public static Animation shakeAnimation(int counts) { Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0); //设置一个循环加速器,使用传入的次数就会出现摆动的效果。 translateAnimation.setInterpolator(new CycleInterpolator(counts)); translateAnimation.setDuration(500); return translateAnimation; } }使用方法同普通的EditText:
到此,关于"Android中如何通过自定义EditText实现清除和抖动功能"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
图标
功能
方法
学习
右边
宽度
控件
事件
位置
内容
动画
图片
更多
焦点
间距
帮助
监听
输入
实用
普通
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
方城县政府网络安全局
数据库修改A列的数据
静安区个人数据库销售厂家报价
csgo不能连接安全服务器
数据库配置文件启动内存
南通政务软件开发公司
科学探索网络安全
邮乐网络技术公司电话
微数互联网科技有限公司
我手机连接不上服务器怎么回事
非数据库的读写性能
互联网促进了科技创新
数据库设计方法和注意事项
伴随着网络安全法的实施
惠城软件开发定制
网络安全案例100字
悠玩双扣连不到服务器
杭州奔马网络技术有限公司
软件开发选择哪个行业比较好
json 导入数据库
联想服务器 售后电话
云计算数据库服务
优秀的开源文件服务器
华硕b365主板服务器cpu
win7安装服务器
实验室排课系统数据库设计
想通网络技术有限公司
开发网页上传文件到服务器功能
nt会显示哪些数据库
五华区专业性软件开发咨询报价