1. public class ClearEditText extends EditText implements OnFocusChangeListener,
  2. TextWatcher {
  3. // 删除按钮的引用
  4. private Drawable mClearDrawable;
  5. // 控件是否有焦点
  6. private boolean hasFoucs;
  7. public ClearEditText(Context context) {
  8. this(context, null);
  9. }
  10. public ClearEditText(Context context, AttributeSet attrs) {
  11. this(context, attrs, android.R.attr.editTextStyle);
  12. }
  13. public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
  14. super(context, attrs, defStyle);
  15. init();
  16. }
  17. private void init() {
  18. // 获取EditText的DrawableRight,假如没有设置使用默认的图片
  19. mClearDrawable = getCompoundDrawables()[2];
  20. if (mClearDrawable == null) {
  21. mClearDrawable = getResources().getDrawable(
  22. R.drawable.delete_selector);
  23. }
  24. mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(),
  25. mClearDrawable.getIntrinsicHeight());
  26. // 默认设置隐藏图标
  27. setClearIconVisible(false);
  28. // 设置焦点改变的监听
  29. setOnFocusChangeListener(this);
  30. // 设置输入框里面内容发生改变的监听
  31. addTextChangedListener(this);
  32. }
  33. @Override
  34. public boolean onTouchEvent(MotionEvent event) {
  35. if (event.getAction() == MotionEvent.ACTION_UP) {
  36. if (getCompoundDrawables()[2] != null) {
  37. boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())
  38. && (event.getX() < ((getWidth() - getPaddingRight())));
  39. if (touchable) {
  40. this.setText("");
  41. }
  42. }
  43. }
  44. return super.onTouchEvent(event);
  45. }
  46. /**
  47. * 当ClearEditText焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏
  48. */
  49. @Override
  50. public void onFocusChange(View v, boolean hasFocus) {
  51. this.hasFoucs = hasFocus;
  52. if (hasFocus) {
  53. setClearIconVisible(getText().length() > 0);
  54. } else {
  55. setClearIconVisible(false);
  56. }
  57. }
  58. /**
  59. * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去
  60. */
  61. protected void setClearIconVisible(boolean visible) {
  62. Drawable right = visible ? mClearDrawable : null;
  63. setCompoundDrawables(getCompoundDrawables()[0],
  64. getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
  65. }
  66. /**
  67. * 当输入框里面内容发生变化的时候回调的方法
  68. */
  69. @Override
  70. public void onTextChanged(CharSequence s, int start, int count, int after) {
  71. if (hasFoucs) {
  72. setClearIconVisible(s.length() > 0);
  73. }
  74. }
  75. @Override
  76. public void beforeTextChanged(CharSequence s, int start, int count,
  77. int after) {
  78. }
  79. @Override
  80. public void afterTextChanged(Editable s) {
  81. }
  82. }

带清空按钮的EditText的更多相关文章

  1. android自定义文本框,后面带清空按钮

    android常见的带清空按钮的文本框,获得焦点时如果有内容则显示,否则不显示 package com.qc.health.weight; import com.qc.health.R; import ...

  2. 带清空按钮TextBox的实现(WPF)

    本博文针对人群:WPF新手.博文内容:通过Style制定包含清空Button的TextBox样式模板,通过在Style中引入自定义类的附加属性完成对TextBox的内容清空. <span sty ...

  3. 35.Android之带删除按钮EditText学习

    今天实现Android里自定义带删除功能的EditText,效果如下: 当输入内容时,EditText变为带有一个删除功能按钮的编辑框,如图: 实现代码很简单,直接上代码, 布局文件xml: < ...

  4. Android自定义控件实现带有清除按钮的EditText

    首先声明我也是参考了别人的思路,只是稍微做了下修改,增加显示密码与隐藏密码,没有输入字符串时让EditText进行抖动,废话少说这里附上效果图 效果很赞有木有 那么怎么实现这种效果呢?那就跟着我一起来 ...

  5. Android带加减的edittext

    看了网上这样自带加减的edittext写得好复杂,还有各种监听事件,我觉得没有必有.于是我自己写了一个. 我这个edittext仅仅限制整数,每次加减1. public class TestEditT ...

  6. easyui datebox 扩展清空按钮及日期判断

    <input id="EndHavDate" class="easyui-datebox" data-options="prompt:'请选择结 ...

  7. [iOS-UI]点击清空按钮,却会有提交的感觉

    一,问题分析 1.感觉像是点击清空按钮时调用了添加按钮的事件. 2.插入断电后,还真是这样. 3.仔细想想,才发现,原来是我复制了添加按钮,变成为添加按钮,进而点击清空时,不仅清空了所有内容,还把最新 ...

  8. jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动

    jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382

  9. EasyUI 1.3.6 DateBox添加清空按钮

    EasyUI 1.3.6 DateBox添加清空按钮 效果如图: EasyUI datebox是没有清空按钮的,可通过如下方法加入: 打开jquery.easyui.min.js看到这样如此乱的代码, ...

随机推荐

  1. 【主席树】【bzoj2161】[hdu4348]

    #include<cstdio> #include<algorithm> #include<cstring> #define N 400000 using name ...

  2. 期望+DP ZOJ 3929 Deque and Balls

    题目链接 题意:给你n个数,按照顺序依次放入一个双端队列(可放在头部,也可以放在尾部),求xi > xi+1的期望 * 2^n mod (1e9 +7) 分析:期望*2^n=出现这种排法的概率* ...

  3. iris数据集

    iris以鸢尾花的特征作为数据来源,数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性,是在数据挖掘.数据分类中非常常用的测试集.训练集. 链接地址

  4. Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)

    题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...

  5. HDU 2846 (AC自动机+多文本匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2846 题目大意:有多个文本,多个模式串.问每个模式串中,有多少个文本?(匹配可重复) 解题思路: 传统 ...

  6. hdu2094 set初体验

    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛.球赛的规则如下:如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C.如果A打败了B,B又打败了C,而 ...

  7. [WP8.1UI控件编程]Windows Phone VirtualizingStackPanel、ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件

    11.2.2 VirtualizingStackPanel.ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件 VirtualizingStackPanel.ItemsSta ...

  8. [Cocos2d-x For WP8]Layer 层

        层(CCLayer) 从概念上说,层就是场景里的背景. CCLayer同样是CCNode的子类,通常用addChild方法添加子节点.CCLayer对象定义了可描绘的区域,定义了描绘的规则.C ...

  9. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  10. 闲扯淡json格式与对象

    在这里推荐使用http://json.tongxiehui.net/ 这个在线解析jso格式 JSON 语法是 JavaScript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保 ...