Android学习笔记——自定义EditText增加清除功能

news/2024/7/4 14:56:55

运算效果:

实现代码:

 1 import android.content.Context;
 2 import android.graphics.Rect;
 3 import android.graphics.drawable.Drawable;
 4 import android.text.Editable;
 5 import android.text.TextWatcher;
 6 import android.util.AttributeSet;
 7 import android.view.MotionEvent;
 8 import android.widget.EditText;
 9 
10 public class CustomEditText extends EditText {
11     private Drawable mRight;
12     private Rect mBounds;
13 
14     public CustomEditText(Context context) {
15         super(context);
16         init();
17     }
18 
19     public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
20         super(context, attrs, defStyle);
21         init();
22     }
23 
24     public CustomEditText(Context context, AttributeSet attrs) {
25         super(context, attrs);
26         init();
27     }
28 
29     private void init() {
30         setDrawable();
31         // 增加文本监听器
32         addTextChangedListener(new TextWatcher() {
33 
34             @Override
35             public void onTextChanged(CharSequence s, int start, int before,
36                     int count) {
37 
38             }
39 
40             @Override
41             public void beforeTextChanged(CharSequence s, int start, int count,
42                     int after) {
43 
44             }
45 
46             @Override
47             public void afterTextChanged(Editable s) {
48                 setDrawable();
49             }
50         });
51     }
52 
53     // 输入框右边的图标显示控制
54     private void setDrawable() {
55         if (length() == 0) {
56             setCompoundDrawables(null, null, null, null);
57         } else {
58             setCompoundDrawables(null, null, mRight, null);
59         }
60     }
61 
62     @Override
63     public void setCompoundDrawables(Drawable left, Drawable top,
64             Drawable right, Drawable bottom) {
65         if (mRight == null) {
66             this.mRight = right;
67         }
68         super.setCompoundDrawables(left, top, right, bottom);
69     }
70 
71     // 输入事件处理
72     @Override
73     public boolean onTouchEvent(MotionEvent event) {
74         if (mRight != null && event.getAction() == MotionEvent.ACTION_UP) {
75             this.mBounds = mRight.getBounds();
76             int eventX = (int) event.getX();
77             int width = mBounds.width();
78             int right = getRight();
79             if (eventX > (right - 2 * width)) {
80                 setText("");
81                 event.setAction(MotionEvent.ACTION_CANCEL);
82             }
83         }
84         return super.onTouchEvent(event);
85     }
86 
87     @Override
88     protected void finalize() throws Throwable {
89         super.finalize();
90         this.mRight = null;
91         this.mBounds = null;
92     }
93 
94 }

 

转载于:https://www.cnblogs.com/agrimony/p/3280461.html


http://www.niftyadmin.cn/n/3051406.html

相关文章

zookeeper安装(单机和集群)

zookeeper安装单机安装下载解压修改配置文件启动查看状态命令行访问查看帮助查看目录 ls path查看目录下面的数据 get path集群安装创建 myid 文件将zookeeper部署到另外2台机器上修改myid 文件配置其他服务器按照上面一样的操作每个节点都启动zookeeper查看zookeeper状态连接主…

基于Java的电影购票系统的设计与实现(源码+文档+数据库)

本系统是一个网上电影售票系统,可以为用户提供方便的在线订票环境。主要实现了用户注册、登录、查询、订购电影票、管理已订购电影票等功能。通过后台管理模块可以实现对用户、播放厅、电影、影片安排、电影票等的管理等功能。本系统以IntelliJ IDEA 作为开发环境&a…

7.1 简单线性回归 (Simple Linear Regression)下

1. 简单线性回归模型举例: 汽车卖家做电视广告数量与卖出的汽车数量: 1.1 如何练处适合简单线性回归模型的最佳回归线? 使sum of squares最小 1.1.2 计算 分子 (1-2)(14-20)(3-2)(24-20)(2-2)(18-20)(1-2)(17-20)(3-2)(27-20) 6 4 0 3…

Java反射机制的简单学习

今天看了一下Java的反射机制,就此记录一下。 首先,我们要先了解一下什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。  JAVA反射机制是在运行状态中&#xff…

进程系统调用函数

fork pid_t fork(void); 返回值: 0: 子进程 子进程 PID(大于0 的整数): 父进程 getpid() getppid() 转载于:https://www.cnblogs.com/fengyang66/p/6021100.html

Vue项目之IE下打开页面是空白

原因是:Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API ,比如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法&#xff0…

7.1 简单线性回归 (Simple Linear Regression)上

0. 前提介绍: 为什么需要统计量? 统计量:描述数据特征 0.1 集中趋势衡量 0.1.1均值(平均数,平均值)(mean) {6, 2, 9, 1, 2} (6 2 9 1 2) / 5 20 / 5 4 0.1.2中位数 &#xff…

storm安装(单机和集群)

storm安装单机和集群单机安装下载解压这里不做修改,直接启动访问UI界面集群搭建修改storm.yaml 配置文件将程序拷贝到其他节点启动服务单机安装 下载 https://storm.apache.org/在官方网站下载storm即可 解压 解压到指定文件夹/opt/topology/service tar zxf s…