如何在 Android 中监控 TextView 的变化

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

一些基于表单的应用程序需要持续监视文本更改以执行前端表单验证。这可以通过实现 android.text.TextWatcher 接口来实现。 TextWatcher 接口提供了以下三个回调方法,它们在更新文本视图时调用。


 public void beforeTextChanged(CharSequence s, int start, int count, int after);
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Editable s);

beforeTextChanged() onTextChanged() 方法主要作为通知提供,不应在这些方法中的任何一个中对 CharSequence 进行更改。如果您试图拦截输入到视图中的文本,则可能会在调用 afterTextChanged() 时进行更改。

首先,您需要向 TextView 注册一个 TextWatcher 实例,调用 textView.addTextChangedListener() 方法。从语法中可以看出,一个 TextView 可以注册多个 TextWatcher。现在我们了解了要使用的方法,让我们检查示例的用法。

统计 TextView 变化的字符数

TextWatcher 的一个简单用途是创建一个实时字符计数器,它在用户键入或删除信息时跟随 EditText。


 public void beforeTextChanged(CharSequence s, int start, int count, int after);
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Editable s);

因为我们的需求不包括修改插入的文本,所以我们可以从 onTextChanged() 读取计数,文本更改一发生就会发生。其他方法未使用并留空。