输入文本框 右边带有删除按钮 当有输入时,显示删除按钮,当无输入时,不显示删除按钮。

重写ClearEditText继承EditText,通过监听焦点的改变,来隐藏和现实右边的叉号,并监听输入框内容的改变,增加了输入框里面内容发生变化的时候回调的方法


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) {// 这里构造方法也很重要,不加这个很多属性不能再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,假如没有设置我们就使用默认的图片mClearDrawable = getCompoundDrawables()[2];if (mClearDrawable == null) {// throw new// NullPointerException("You can add drawableRight attribute in XML");mClearDrawable = getResources().getDrawable(R.drawable.ic_close_circle);}mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());// 默认设置隐藏图标setClearIconVisible(false);// 设置焦点改变的监听setOnFocusChangeListener(this);// 设置输入框里面内容发生改变的监听addTextChangedListener(this);}/*** 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 当我们按下的位置 在 EditText的宽度 -* 图标到控件右边的间距 - 图标的宽度 和 EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑*/@Overridepublic 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焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏*/@Overridepublic 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]);}/*** 当输入框里面内容发生变化的时候回调的方法*/@Overridepublic void onTextChanged(CharSequence s, int start, int count, int after) {if (hasFoucs) {setClearIconVisible(s.length() > 0);}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void afterTextChanged(Editable s) {}}

带有小叉号的textview相关推荐

  1. IDEA类文件出现小叉号

    java 在新建文件后,启动过程中发现java文件左上角出现小叉号 原因:具说是标识这个类不会在工程编译的时候进行编译 解决:ctrl+alt+s打开Settings设置查找excludes,(或Fi ...

  2. html 在图片添加叉号,html5 表单输入时有个小叉号是怎么做的

    匿名用户 1级 2017-02-25 回答 HTML5已被更多的应用程序所使用,特别是内部应用程序,而HTML5的验证功能,无疑是其中最常用的功能,本文作者(jawidx)将根据自己的使用经验对其进行 ...

  3. intellij idea 类和文件夹(目录)左上角出现小叉号

    如图所示: 解决办法:打开idea工具,File–Settings或ctrl+alt+s打开设置 找到Excludes,在右边找到项目路径删除即可.

  4. yota3+ wifi 4g图标显示小叉号问题

    adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204

  5. lineageos信号叉号_Z1刷lineage os 14.1 15.1官方版后信号上叉号的清除教程

    本帖最后由 axmsn 于 2018-4-26 06:38 编辑 成功刷入lineage os后(这里以lineage os 14.1为例),会发现不论WIFI还是移动信号,都有一个小叉号 Scree ...

  6. 自定义布局Dialog 自定义dialog右上角带叉号的dialog 点击右上角叉号关闭dialog

    话说之前写过一遍Android中常见的几种Dialog的介绍和基本用法,但是没有讲到实际项目中最常用到的自定义dialog.正好,马上项目要添加新模块,看到里面有用到自定义dialog部分,于是乎趁着 ...

  7. 解决eclipse web项目前面出现红色感叹号和红色叉号等错误

    今天遇到了一个很棘手的问题,就是在导入其他项目之后,由于JDK版本或者Tomcat服务器版本不同,导致项目前面一直出现红色感叹号或红色叉号. 在网上查了很多方法,只做到了消除大部分错误,即所有的代码可 ...

  8. 设备管理器其它设备Android叹号,设备管理器中的设备显示感叹号/问号/叉号的解决方法...

    设备管理器是Windows操作系统自带的管理工具,其为用户提供了设置设备.启用/禁用设备.更新设备驱动程序等多种强大的功能,帮助用户能后更好的使用电脑的硬件设备,而部分用户在打开设备管理器时,发现部分 ...

  9. nearbyserversocket驱动_设备管理器有叉号、问号、感叹号?驱动人生一键解决

    在Windows操作系统中,设备管理器是管理计算机硬件设备的工具,我们可以借助设备管理器查看计算机中所安装的硬件设备.设置设备属性.安装或更新驱动程序.停用或卸载设备,可以说是功能非常强大.但有时候你 ...

最新文章

  1. 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)
  2. excel两个表格数据对比_Excel小技巧:实例教你快速对比多个表格的差异
  3. 将Sublime Text 3设置为Python全栈开发环境
  4. equals方法重写详解
  5. 多场景下的AI疫情防控“天网”:解读云边端联动下的全栈 AI 技术
  6. 那一天我们许下约定(组合数学,DP)
  7. 【转】简析 .NET Core 构成体系
  8. 浅谈@RequestParam与@RequestBody区别
  9. 使用C#在应用程序间发送消息
  10. 数据库分类与四大类NoSQL数据库
  11. 主曲率、高斯曲率、平均曲率的物理意义及公式
  12. 顶级赛事!2021 CCF大数据与计算智能大赛强势来袭~
  13. 搭建srs流媒体服务器
  14. 如何替换mac word中的换行符为空格
  15. 景区大数据可预警客流量
  16. 2009年我国报刊发行创新的五个关键词
  17. window10 男装linux,男人帮男装购物app-男人帮手机版下载v2.3.5-Linux公社
  18. 基于Android的招聘求职网站的设计与实现
  19. win10系统ipv6服务器地址,Win10关闭iPv6地址方法
  20. 年入800万!韩国第一虚拟网红的崛起

热门文章

  1. 手机打车APP的机遇与挑战
  2. 新华三防火墙简单配置安全域
  3. Hazelcast本地安装
  4. 一文学会用Python操作Excel+Word+CSV
  5. 网易2011笔试题详解
  6. 软件开发过程中的环境简介
  7. 让不懂编程的人爱上iPhone开发(2017iOS11+Swift4+Xcode9版)-第5篇
  8. 篡改计算机网络,基于TCP协议的网络数据实时篡改.doc
  9. 在Windows10系统中同步Internet 时间
  10. 数据结构:什么是红黑树?为什么要用红黑树?