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

简介:

 

 
  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.  
  14.     private Drawable xD; 
  15.  
  16.     public ClearableEditText(Context context) { 
  17.         super(context); 
  18.         init(); 
  19.     } 
  20.  
  21.     public ClearableEditText(Context context, AttributeSet attrs) { 
  22.         super(context, attrs); 
  23.         init(); 
  24.     } 
  25.  
  26.     public ClearableEditText(Context context, AttributeSet attrs, int defStyle) { 
  27.         super(context, attrs, defStyle); 
  28.         init(); 
  29.     } 
  30.  
  31.     private void init() { 
  32.         xD = getCompoundDrawables()[2]; 
  33.         if (xD == null) { 
  34.             xD = getResources() 
  35.                     .getDrawable(R.drawable.search_clear); 
  36.         } 
  37.         xD.setBounds(00, xD.getIntrinsicWidth(), xD.getIntrinsicHeight()); 
  38.         setClearIconVisible(false); 
  39.         super.setOnFocusChangeListener(this); 
  40.         addTextChangedListener(this); 
  41.     } 
  42.  
  43.  
  44.     @Override 
  45.     public void setOnFocusChangeListener(OnFocusChangeListener f) { 
  46.         this.f = f; 
  47.     } 
  48.  
  49.     private OnFocusChangeListener f; 
  50.  
  51.     @Override 
  52.     public boolean onTouchEvent(MotionEvent event) { 
  53.         if (getCompoundDrawables()[2] != null) { 
  54.             if (event.getAction() == MotionEvent.ACTION_UP) { 
  55.                 boolean tappedX = event.getX() > (getWidth() 
  56.                         - getPaddingRight() - xD.getIntrinsicWidth()); 
  57.                 if (tappedX) { 
  58.                     setText(""); 
  59.                      
  60.                     event.setAction(MotionEvent.ACTION_CANCEL); 
  61.  
  62.                 } 
  63.             } 
  64.         } 
  65.  
  66.         return super.onTouchEvent(event); 
  67.     } 
  68.  
  69.     @Override 
  70.     public void onFocusChange(View v, boolean hasFocus) { 
  71.         if (hasFocus) { 
  72.             setClearIconVisible(getText().length() > 0); 
  73.         } else { 
  74.             setClearIconVisible(false); 
  75.         } 
  76.         if (f != null) { 
  77.             f.onFocusChange(v, hasFocus); 
  78.         } 
  79.     } 
  80.  
  81.  
  82.  
  83.     protected void setClearIconVisible(boolean visible) { 
  84.         Drawable x = visible ? xD : null
  85.         setCompoundDrawables(getCompoundDrawables()[0], 
  86.                 getCompoundDrawables()[1], x, getCompoundDrawables()[3]); 
  87.     } 
  88.      
  89.     @Override 
  90.     public void onTextChanged(CharSequence s, int start, int count, 
  91.             int after) { 
  92.         setClearIconVisible(s.length() > 0); 
  93.     } 
  94.  
  95.     @Override 
  96.     public void beforeTextChanged(CharSequence s, int start, int count, 
  97.             int after) { 
  98.         // TODO Auto-generated method stub 
  99.          
  100.     } 
  101.  
  102.     @Override 
  103.     public void afterTextChanged(Editable s) { 
  104.         // TODO Auto-generated method stub 
  105.          
  106.     } 
  107.  
  108.  

本文转自william_xu 51CTO博客,原文链接:http://blog.51cto.com/williamx/1195051,如需转载请自行联系原作者
相关文章
|
28天前
|
安全 数据挖掘 Android开发
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
99 2
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
|
4月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
|
7月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
216 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
7月前
|
安全 Android开发 数据安全/隐私保护
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
297 12
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
|
7月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
232 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
7月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
230 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
7月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
827 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
9月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
866 11
|
9月前
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####

热门文章

最新文章