监听EditText输入的字数
来源:互联网 发布:参知政事和同平章事 编辑:程序博客网 时间:2024/05/16 12:29
EditText replay;
private int editStart, editEnd;
private long MAX_COUNT = 200;
private long MAX_COUNT = 200;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
editStart = replay.getSelectionStart();
editEnd = replay.getSelectionEnd();
// 先去掉监听,否则会出现栈溢器出
replay.removeTextChangedListener(this);
// 注意这里只能每次都对整个EditText的内容求长度,不能对删除的单个字符求长度
// 因为是中英文混合,单个字符而言,calculateLength函数都会返回1
while (calculateLength(s.toString()) > MAX_COUNT) { // 当输入字符个数超过限制的大小时,进行截断操作
s.delete(editStart - 1, editEnd);
editStart--;
editEnd--;
}
replay.setText(s);
replay.setSelection(editStart);
// 恢复监听器
replay.addTextChangedListener(this);
tvNum.setText(String.format(getString(R.string.字数), String.valueOf(0 + getInputCount())));
}
/**
* 获取用户输入的分享内容字数
*
* @return
*/
private long getInputCount() {
return calculateLength(replay.getText().toString());
}
/**
* 计算图说内容的字数,一个汉字=两个英文字符,一个中文标点=两个英文标点 注意:该函数的不是用于对单个字符进行计算,因为单个字符四舍五入后都是1
*
* @param c
* @return
*/
private long calculateLength(CharSequence c) {
double len = 0;
for (int i = 0; i < c.length(); i++) {
int tmp = (int) c.charAt(i);
if (tmp > 0 && tmp < 127) {
len += 0.5;
} else {
len++;
}
}
return Math.round(len);
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
editStart = replay.getSelectionStart();
editEnd = replay.getSelectionEnd();
// 先去掉监听,否则会出现栈溢器出
replay.removeTextChangedListener(this);
// 注意这里只能每次都对整个EditText的内容求长度,不能对删除的单个字符求长度
// 因为是中英文混合,单个字符而言,calculateLength函数都会返回1
while (calculateLength(s.toString()) > MAX_COUNT) { // 当输入字符个数超过限制的大小时,进行截断操作
s.delete(editStart - 1, editEnd);
editStart--;
editEnd--;
}
replay.setText(s);
replay.setSelection(editStart);
// 恢复监听器
replay.addTextChangedListener(this);
tvNum.setText(String.format(getString(R.string.字数), String.valueOf(0 + getInputCount())));
}
/**
* 获取用户输入的分享内容字数
*
* @return
*/
private long getInputCount() {
return calculateLength(replay.getText().toString());
}
/**
* 计算图说内容的字数,一个汉字=两个英文字符,一个中文标点=两个英文标点 注意:该函数的不是用于对单个字符进行计算,因为单个字符四舍五入后都是1
*
* @param c
* @return
*/
private long calculateLength(CharSequence c) {
double len = 0;
for (int i = 0; i < c.length(); i++) {
int tmp = (int) c.charAt(i);
if (tmp > 0 && tmp < 127) {
len += 0.5;
} else {
len++;
}
}
return Math.round(len);
}
0 0
- 监听EditText输入的字数
- Android 监听EditText输入文字的字数
- 限制EditText的输入字数
- 监听EditText的输入
- Android开发:监听EditText字数的变化
- Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制
- Edittext监听字数变化
- android EditText限制输入字数的方法
- android EditText限制输入的字数
- Android中EditText的输入字数限制
- 实时判断EditText里面输入的字数
- Android EditText 限制输入的字数
- EditText限制输入字数
- 限制EditText输入字数
- EditText 字数限制输入
- EditText 输入字数限制
- EditText限制输入字数
- EditText输入长度的监听
- 447. Number of Boomerangs
- 529. Minesweeper(Medium)
- Android开发:最全面、最易懂的Webview详解
- python之数据库操作
- IntelliJ Idea编译报错:javacTask: 源发行版 1.7 需要目标发行版 1.7
- 监听EditText输入的字数
- 所有CSS伪类/元素
- 地图构建算法分析整理
- git 通过 https.proxy 下载github上的项目
- codeforces 779d
- Oracle JOB 案例
- 【DayDayUp】【算法_图_欧拉回路_之一_Fleury (弗罗莱) 算法】
- Centos下Yum安装PHP5.5,5.6,7.0
- Django shell