EditText增加字数限制
程序员文章站
2022-05-14 08:03:04
...
方法一、在xml中添加属性限制字符长度
实现1.android:maxLength=“10”
直接对EditText的字数进行控制。不管中文还是英文。
<EditText
android:layout_width="380dp"
android:layout_height="210dp"
android:maxLength="10" />
实现2.android:maxEms=“10”
设置控件的宽度为最长为N个字符的宽度
无法精确的控制(无法达到我们需要的要求)
<EditText
android:layout_width="380dp"
android:layout_height="210dp"
android:maxEms="10" />
方法二、Java代码中使用InputFilter输入过滤器
一、效果图
二、简单使用
/**
* @params max 字数限制
*/
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(50)});
对拦截的处理
重写InputFilter.LengthFilter的filter方法处理拦截
editText.setFilters(
new InputFilter[]{
new InputFilter.LengthFilter(50) {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
CharSequence charSequence = super.filter(source, start, end, dest, dstart, dend);
if (charSequence == null)
return null;
if (!TextUtils.equals(charSequence, source)) {
Toast.makeText(ChangeIntroductionActivity.this, "最多支持50字", Toast.LENGTH_SHORT).show();
}
return charSequence;
}
}
}
);
方法三、通过监听EditText的输入字符的事件
EditText添加文字改变监听事件
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int editStart = mEditText.getSelectionStart();
int editEnd = mEditText.getSelectionEnd();
while (calculateLength(s.toString()) > 20) {
// 当输入字符个数超过限制的大小时,进行截断操作
((Editable) s).delete(editStart - 1, editEnd);
editStart--;
editEnd--;
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
计算字符串的长度
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);
}
推荐阅读