https://gitee.com/afei_/MyEditText

一 、特点

1.简单。只有一个不到100行的类,且无任何依赖,也没有自定义属性。

2.高效。没有使用LinearLayout包含EditText+ImageView的组合形式实现,仅仅只有一个继承EditText的自定义view,减少了布局的嵌套和view的数量。

3.易用。看我代码中的调用就知道多简单了。

二、创建一个ClearEditText类

public class ClearEditText extends EditText implements View.OnFocusChangeListener, TextWatcher {private Drawable mClearDrawable;private boolean hasFocus;public ClearEditText(Context context) {this(context, null);}public ClearEditText(Context context, AttributeSet attrs) {super(context, attrs);init();}public ClearEditText(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}private void init() {// getCompoundDrawables() Returns drawables for the left(0), top(1), right(2) and bottom(3)mClearDrawable = getCompoundDrawables()[2]; // 获取drawableRightif (mClearDrawable == null) {// 如果为空,即没有设置drawableRight,则使用R.mipmap.close这张图片mClearDrawable = getResources().getDrawable(R.mipmap.close);}mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());setOnFocusChangeListener(this);addTextChangedListener(this);// 默认隐藏图标setDrawableVisible(false);}/*** 我们无法直接给EditText设置点击事件,只能通过按下的位置来模拟clear点击事件* 当我们按下的位置在图标包括图标到控件右边的间距范围内均算有效*/@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_UP) {if (getCompoundDrawables()[2] != null) {int start = getWidth() - getTotalPaddingRight() + getPaddingRight(); // 起始位置int end = getWidth(); // 结束位置boolean available = (event.getX() > start) && (event.getX() < end);if (available) {this.setText("");}}}return super.onTouchEvent(event);}@Overridepublic void onFocusChange(View v, boolean hasFocus) {this.hasFocus = hasFocus;if (hasFocus && getText().length() > 0) {setDrawableVisible(true); // 有焦点且有文字时显示图标} else {setDrawableVisible(false);}}@Overridepublic void onTextChanged(CharSequence s, int start, int count, int after) {if (hasFocus) {setDrawableVisible(s.length() > 0);}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void afterTextChanged(Editable s) {}protected void setDrawableVisible(boolean visible) {Drawable right = visible ? mClearDrawable : null;setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], right, getCompoundDrawables()[3]);}}

三、使用

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.afei.myedittext.MainActivity"><com.afei.myedittext.ClearEditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"/></RelativeLayout>

四、注意事项

1.图标你可以通过在xml中android:drawableRight=""指定,当然如果你不指定我没呢就会使用一个默认图标,这个图标需要事先准备,毕竟ic_launcher太丑了。

2.图标默认显示在右侧,如果你的需求很古怪的话可以自己修改相应代码轻松实现(修改getCompoundDrawables()[]对应的数组下标)。

3.DropEditText整个控件的高度不要太小,否则文字或者图片会显示不全,这是EditText都会有的问题。

4.例如我的DropEditText使用的高度为“wrap_content",但是图片如果较大的话当drawable显示的时候就会撑高DropEditText的高度,所以你的图片高度应该适中,我使用的图片是60*60的,放置在xxhdpi下效果就很好。

Android中ClearEditText自带清除功能的EditText相关推荐

  1. android edittext清除功能,Android:带一键清除功能的EditText

    作为一个前端应用开发者,下面这样的场景可以说是屡见不鲜了? 20181218135459.png 当然了,本文所要讲的重点不是如何做一个登录页面,而是输入框后面的那个清除按钮.你可能会说了,这有什么好 ...

  2. android 带清除功能的输入框控件

    今天,看到一个很好的自定义输入框控件,于是记录一下. 效果很好: 一,自定义一个类,名为ClearEditText package com.example.clearedittext;import a ...

  3. openlayers绘制自定义点线面样式,带清除功能Vue版

    openlayers绘制自定义点线面样式,带清除功能 初学openlayers 有不足之处还望轻喷,多谢 项目用的是vue,elementUI,以及scss 啊-本来点线面都录制了一个gif图,因为某 ...

  4. Android中使用自带TextToSpeech实现语音合成时Pico TTS引擎不能播放中文怎样解决

    场景 Android中使用自带TextToSpeech实现离线语音合成功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109 ...

  5. android系统旁边有一个锁,Android中系统自带锁WalkLock与KeyguardLock用法实例详解

    本文实例讲述了Android中系统自带锁WalkLock与KeyguardLock用法.分享给大家供大家参考,具体如下: WalkLock - 顾名思义 唤醒锁 点亮屏幕用的 KeyguardLock ...

  6. android添加图片按钮,如何给Android中的按钮添加图片功能

    在layout中建一个my_login.xml文件 代码如下 android:layout_width="fill_parent" android:layout_height=&q ...

  7. Android 带清除功能的输入框控件EditTextWithDel

    记录下一个很实用的小控件EditTextWithDel,就是在Android系统的输入框右边加入一个小图标,点击小图标可以清除输入框里面的内容,由于Android原生EditText不具备此功能,所以 ...

  8. 三星内存android用法,三星One UI(Android 9)自带清理功能:自动释放内存和存储空间...

    文章翻译自sammobile,侵删 三星Galaxy手机拥有让设备保持最佳运行所需的所有工具,包括通过停止后台应用程序释放设备内存以及通过删除不必要的文件释放存储空间.但是不能期望用户主动关注这些方面 ...

  9. android sharedpreferences 存储对象,android中SharedPreferences实现存储用户名功能

    1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shared ...

最新文章

  1. linux下载python的es库,Elasticsearch py客户端库安装及使用方法解析
  2. twitter storm学习 - 安装部署问题汇总
  3. JavaScript实现levenshteinDistance字符串编辑距离算法(附完整源码)
  4. web开发入门_Web开发人员和设计师的自由职业入门
  5. Android实现mp3分析,Android编程实现播放MP3功能示例
  6. C++设计模式-迭代器模式
  7. 三星Galaxy Fold中国区发布会临时取消:推迟时间未定 彻查屏幕问题
  8. spring security 注解_Spring框架使用@Autowired自动装配引发的讨论
  9. 软件过程与项目管理第二周作业
  10. ERP系统“数字排产”功能,实现企业高效排产
  11. wget 下载需要登录验证的网页文件
  12. 北京车管所 与 换领驾驶证过程
  13. 大白菜U盘装系统工具,被爆出病毒!
  14. 华为ENSP模拟器 AR启动 报错40
  15. 每日加瓦,终成栋房6-展望未来(SpringBoot)
  16. 【2018】—不忘初心,砥砺前行
  17. 各系统勒索补丁下载地址
  18. 由九天创合资本及OnFund向上基金联合主办的链•全球区块链投资机构系列酒会第一站在上海顺利举办
  19. 滤芯怎么换 石头机器人_【诉说实情】小米扫地机机器人配件米家石头滤芯怎么样?小编深度剖析评测? | 智能扫地机器人评测...
  20. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中作业(c)

热门文章

  1. 20230403英语学习
  2. 为程序开发人员量身定制的12个目标
  3. 【初学者】新浪云平台部署与调试云应用
  4. 用Python写个自动批改作业系统!
  5. Materialize——扁平化卡片式网页模板
  6. SharePoint审核及监控工具
  7. LotWan广域网加速系统
  8. Python机器学习--算法--决策树算法
  9. 刘强东痛批京东中高层用 PPT 欺骗自己,网友:“我领导也天天被写 PPT 的忽悠……”
  10. linux关机shutdown无效,Linux正确shutdown关机的姿势