博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EditText 的 TextWatcher 监听器
阅读量:6910 次
发布时间:2019-06-27

本文共 3361 字,大约阅读时间需要 11 分钟。

hot3.png

EditText的TextWatcher监听器

public void beforeTextChanged(CharSequence s, int start, int count, int after)

s:修改之前的文本

start:文本开始位置

count:之前文本被修改的个数

after:新增文本的个数

public void onTextChanged(CharSequence s, int start, int before, int count)

s:修改之后的文本

start:开始位置

before:之前文本被修改的个数

count:新增文本的个数

public void afterTextChanged(Editable s)

s:最终的文本

例子:

文本:1(新增:从0位置开始)

D/xx: beforeTextChanged :: s=,start=0, count=0, after=1 D/xx: onTextChanged :: s=1,start=0, before=0, count=1 D/xx: afterTextChanged :: s=1

文本:1234 变到 12345(新增)

D/xx: beforeTextChanged :: s=1234,start=4, count=0, after=1 D/xx: onTextChanged :: s=12345,start=4, before=0, count=1 D/xx: afterTextChanged :: s=12345

文本:12345 变到 1234(删除)

D/xx: beforeTextChanged :: s=12345,start=4, count=1, after=0 D/xx: onTextChanged :: s=1234,start=4, before=1, count=0 D/xx: afterTextChanged :: s=1234

文本:1234 变到 12354(插入)

D/xx: beforeTextChanged :: s=1234,start=3, count=0, after=1 D/xx: onTextChanged :: s=12354,start=3, before=0, count=1 D/xx: afterTextChanged :: s=12354

文本:12354 变到 16354(替换 等于 删除旧的,新增新的)

D/xx: beforeTextChanged :: s=12354,start=1, count=1, after=1 D/xx: onTextChanged :: s=16354,start=1, before=1, count=1 D/xx: afterTextChanged :: s=16354

文本:16354 变到 777(粘贴)

D/xx: beforeTextChanged :: s=16354,start=0, count=5, after=3 D/xx: onTextChanged :: s=777,start=0, before=5, count=3 D/xx: afterTextChanged :: s=777

EditText限制字符

第一种方法

private int MAX_TAG_LENGTH = 10; // 最多字符数editText.addTextChangedListener(new TextWatcher() {        private int startPos; // 修改的开始位置        private int modifyNum; // 新增字符的个数        [@Override](https://my.oschina.net/u/1162528)        public void beforeTextChanged(CharSequence s, int start, int count, int after) {            startPos = start;            modifyNum = after;        }        [@Override](https://my.oschina.net/u/1162528)        public void onTextChanged(CharSequence s, int start, int before, int count) {        }        [@Override](https://my.oschina.net/u/1162528)        public void afterTextChanged(Editable s) {            if (s.length() > maxNum) { // 超出长度,删除多余字符                int beyondNum = s.length() - maxNum; // 超出的个数                int delPos = startPos + modifyNum - beyondNum; // 删除的开始位置                s.delete(delPos, delPos + beyondNum); // 删除多余字符            }        }});

第二种方法

private int maxNum = 85; // 默认最大数为85etMemoText.addTextChangedListener(new TextWatcher() {		private CharSequence inputText; // 修改后的文本		[@Override](https://my.oschina.net/u/1162528)		public void beforeTextChanged(CharSequence s, int start, int count, int after) {		}		[@Override](https://my.oschina.net/u/1162528)		public void onTextChanged(CharSequence s, int start, int before, int count) {			inputText = s;		}		@Override		public void afterTextChanged(Editable s) {			// 当前文本长度			int length = inputText.length();			// 获取光标位置			int selectionStart = etMemoText.getSelectionStart();			int selectionEnd = etMemoText.getSelectionEnd();			if(length > maxNum){				// 删除多余文字				s.delete(selectionStart-1, selectionEnd);				// 设置修改后的文字				etMemoText.setText(s);				// 确定光标应显示的位置				int tempSelection = selectionStart-1;				if(tempSelection >= etMemoText.getText().toString().length()){					tempSelection = etMemoText.getText().toString().length();				}				//设置光标位置				etMemoText.setSelection(tempSelection);			}		}	});

转载于:https://my.oschina.net/u/2501904/blog/685399

你可能感兴趣的文章
interface -- 接口类
查看>>
可怜的小老鼠分析
查看>>
关于设计的一些想法
查看>>
seacms最新版前台getshell
查看>>
linux内核启动笔记
查看>>
第二冲刺阶段第十一天
查看>>
Js~对数组的操作
查看>>
我也来说说DDD~大话目录
查看>>
myeclipse maven项目部署tomcat爆炸404
查看>>
jquery二维码生成插件_二维码生成器
查看>>
常量表达式 & constexpr
查看>>
求奇偶数
查看>>
python__系统 : 异步实现以及GIL
查看>>
用谷歌浏览器来当手机模拟器
查看>>
混合背包问题
查看>>
程序员如何应对北上广高房价示例解说-建造者模式
查看>>
jQuery
查看>>
结队项目-性能分析-解决四则运算题目
查看>>
怎么把提交按扭改为用图片来代替
查看>>
不偏移的天地图地图服务-SuperMap版
查看>>