1. /**
  2. * @类名:ClearableEditText
  3. * @功能描述:
  4. * @作者: William Xu
  5. * @创建日期:2013-4-13
  6. * @修改人:
  7. * @修改日期:
  8. * @修改备注:
  9. * @版本号:1.0
  10. */
  11. public class ClearableEditText extends EditText implements
  12. OnFocusChangeListener, TextWatcher {
  13. private Drawable xD;
  14. public ClearableEditText(Context context) {
  15. super(context);
  16. init();
  17. }
  18. public ClearableEditText(Context context, AttributeSet attrs) {
  19. super(context, attrs);
  20. init();
  21. }
  22. public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
  23. super(context, attrs, defStyle);
  24. init();
  25. }
  26. private void init() {
  27. xD = getCompoundDrawables()[2];
  28. if (xD == null) {
  29. xD = getResources()
  30. .getDrawable(R.drawable.search_clear);
  31. }
  32. xD.setBounds(0, 0, xD.getIntrinsicWidth(), xD.getIntrinsicHeight());
  33. setClearIconVisible(false);
  34. super.setOnFocusChangeListener(this);
  35. addTextChangedListener(this);
  36. }
  37. @Override
  38. public void setOnFocusChangeListener(OnFocusChangeListener f) {
  39. this.f = f;
  40. }
  41. private OnFocusChangeListener f;
  42. @Override
  43. public boolean onTouchEvent(MotionEvent event) {
  44. if (getCompoundDrawables()[2] != null) {
  45. if (event.getAction() == MotionEvent.ACTION_UP) {
  46. boolean tappedX = event.getX() > (getWidth()
  47. - getPaddingRight() - xD.getIntrinsicWidth());
  48. if (tappedX) {
  49. setText("");
  50. event.setAction(MotionEvent.ACTION_CANCEL);
  51. }
  52. }
  53. }
  54. return super.onTouchEvent(event);
  55. }
  56. @Override
  57. public void onFocusChange(View v, boolean hasFocus) {
  58. if (hasFocus) {
  59. setClearIconVisible(getText().length() > 0);
  60. } else {
  61. setClearIconVisible(false);
  62. }
  63. if (f != null) {
  64. f.onFocusChange(v, hasFocus);
  65. }
  66. }
  67. protected void setClearIconVisible(boolean visible) {
  68. Drawable x = visible ? xD : null;
  69. setCompoundDrawables(getCompoundDrawables()[0],
  70. getCompoundDrawables()[1], x, getCompoundDrawables()[3]);
  71. }
  72. @Override
  73. public void onTextChanged(CharSequence s, int start, int count,
  74. int after) {
  75. setClearIconVisible(s.length() > 0);
  76. }
  77. @Override
  78. public void beforeTextChanged(CharSequence s, int start, int count,
  79. int after) {
  80. // TODO Auto-generated method stub
  81. }
  82. @Override
  83. public void afterTextChanged(Editable s) {
  84. // TODO Auto-generated method stub
  85. }
  86. }

转载于:https://blog.51cto.com/williamx/1195051

Android实现仿IOS带清空功能的文本输入框相关推荐

  1. Android安卓仿IOS音量调节-自定义view系列(4)

    Android安卓仿IOS音量调节-自定义view系列 功能简介 主要实现步骤 xml相关属性设置 java代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击查看 Gi ...

  2. Android高仿iOS Messages聊天气泡

    Android高仿iOS Messages聊天气泡 一.目标 二.功能分析 三.实现代码 1. ChatItem 2. DateItem 3. TextItem 4. PhotoItem 5. Cha ...

  3. Android高仿iOS Messages录音操作按钮

    Android高仿iOS Messages录音操作按钮 目录 一.目标 二.功能分析 三.实现效果 四.实现过程 五.开发过程回顾 六.接下来 七.Finally 前面的2次开发,分别完成了实现录音和 ...

  4. android qq红点,Android高仿QQ小红点功能

    先给大家展示下效果图: 绘制贝塞尔曲线: 主要是当在一定范围内拖拽时算出固定圆和拖拽圆的外切直线以及对应的切点,就可以通过path.quadTo()来绘制二阶贝塞尔曲线了~ 整体思路: 1.当小红点静 ...

  5. Android O 和 iOS 11 新功能对比

    Apple 和 Google 都在推出 iOS 和 Android 的下一版本.Google 在上周推出了 Android Oreo (8.0 版本),Apple 将在九月份推出 iPhone 8 后 ...

  6. android菊花动画,Android实现仿iOS菊花加载圈动画效果

    常见的实现方式 切图,做旋转动画 自定义View,绘制效果 gif图 1.切图会增加体积,但相对简单,不过在换肤的场景下,会使用不同颜色,需要准备多张图,不够灵活. 2.由于自定义的好处,不同颜色只需 ...

  7. android 仿ios带弹簧效果的ScrollView

    说ios的效果确实不错,今天就参照别人的代码,修改bug一箩筐,优化体验一大堆. 废话不多说,上代码: /**  * 仿ios弹簧效果 scrollview 带阻尼  * @author sunxia ...

  8. android高仿ios控制中心,高仿ios控制中心安卓版

    高仿ios控制中心安卓版是一款非常好用的安卓仿苹果手机控制中心的软件,能够让使用安卓手机的朋友们随时体验苹果手机的系统,操作简单方便,软件也是非常稳定的,大家可放心的下载使用,感兴趣的用户们就前来下载 ...

  9. android 高仿ios开关,Android自定义view仿IOS开关效果

    本文主要讲解如何在 Android 下实现高仿 iOS 的开关按钮,并非是在 Android 自带的 ToggleButton 上修改,而是使用 API 提供的 onDraw.onMeasure.Ca ...

  10. switch+ios风格android,安卓仿IOS Switch开关按钮

    老规矩,先放上一张图,对比一下安卓原生实现的Switch按钮和仿IOS实现的区别: Switch效果对比 下面主要讲讲仿IOS Switch控件的实现,其实安卓Switch控件中提供了两个属性让我们去 ...

最新文章

  1. CentOS 6.4下安装中文输入法
  2. iphone5新尺寸
  3. 性能php 教程,提高PHP性能效率的几个技巧
  4. Python 换行符
  5. 交换字典的key和value
  6. linux中lsattr命令,在Linux中用chattr和lsattr命令管理文件和目录属性
  7. 阿里“去 IOE”十二年,弹性计算如何二次去 I 和 E?
  8. Android RatingBar使用Kotlin
  9. android.appwidget-AppWidgetManager
  10. Apache Qpid Proton 0.16.0,轻量通信库
  11. JavaScript 优先队列
  12. 离散数学期末复习概念_复习第1部分中的基本概念
  13. 机器学习防止模型过拟合的方法知识汇总
  14. windows cmd修改ip地址
  15. php 高斯分布,多元高斯分布完全解析
  16. 微信lbs开发java_微信LBS获取
  17. Jupyter 进行文字、图片格式编辑
  18. rust巨型采矿机_【rust巨型挖掘机在哪加柴油】专区-挖掘机-铁甲网
  19. 科研 | 心理学在线科研历史,你真的了解它吗?
  20. The power input for PSU 2 is lost

热门文章

  1. xp计算机保护系统,XP系统总是弹出“Windows文件保护”窗口提示的解决方法
  2. HDU 1394 Minimum Inversion Number(线段树求逆序对)
  3. SQL Serever学习14——存储过程和触发器
  4. source ./ 和 . 的区别
  5. 简单实现ToolStripMenuItem(菜单栏)的单选效果
  6. WF4.0 RC 对比 Beta2 的变化
  7. Flex 与外部的数据通信(HTTPService,URLLoader和URLRequest)
  8. 【SpringBoot_ANNOTATIONS】生命周期 04 BeanPostProcessor 后置处理器
  9. java 既不是内部命令也不是外部命令的解决办法
  10. elk怎么读的_大数据采集和抽取怎么做?这篇文章终于说明白了!