在开发应用的时候,文本编辑框EditText有字数输入限制,经常会显示还剩多少字以限制用户输入的字数
1.1.xml 设置最大字数范围:
android:maxLength="10" //即限制最大输入字符个数为10
1.2.在代码中使用InputFilter 进行过滤设置字数:
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
1.3. 自定义InputFilter判断汉字字数: InputFilter[] filters={chineseFilter()};
private InputFilter chineseFilter() {
return new InputFilter() {
String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
float destCount = dest.toString().length()
+ getChineseCount(dest.toString());
float sourceCount = source.toString().length()
+ getChineseCount(source.toString());
if (destCount + sourceCount > 10) {
Log.e("log", "已经达到字数限制范围");
return "";
} else {
return source;
}
}
private float getChineseCount(String str) {
float count = 0;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
for (int i = 0; i <= m.groupCount(); i++) {
count =count + 1;//
}
}
return count;
}
};
}
pribate int max= 10;//限制的最大字数
2.设置监听:
EditText editText= (EditText) findViewById(R.id.et_content);
TextView hasnum = (TextView) findViewById(R.id.tv_num);
editText.addTextChangedListener(passwordListener());
private TextWatcher passwordListener() {
return new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int length =s.length();
hasnum .setText(length+"/"+max);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
}
附:编辑框类型EditText inputType
//文本类型,多为大写、小写和数字符号。
android:inputType="none"
android:inputType="text"
android:inputType="textCapCharacters" 字母大写
android:inputType="textCapWords" 首字母大写
android:inputType="textCapSentences" 仅第一个字母大写
android:inputType="textAutoCorrect" 自动完成
android:inputType="textAutoComplete" 自动完成
android:inputType="textMultiLine" 多行输入
android:inputType="textImeMultiLine" 输入法多行(如果支持)
android:inputType="textNoSuggestions" 不提示
android:inputType="textUri" 网址
android:inputType="textEmailAddress" 电子邮件地址
android:inputType="textEmailSubject" 邮件主题
android:inputType="textShortMessage" 短讯
android:inputType="textLongMessage" 长信息
android:inputType="textPersonName" 人名
android:inputType="textPostalAddress" 地址
android:inputType="textPassword" 密码
android:inputType="textVisiblePassword" 可见密码
android:inputType="textWebEditText" 作为网页表单的文本
android:inputType="textFilter" 文本筛选过滤
android:inputType="textPhonetic" 拼音输入
//数值类型
android:inputType="number" 数字
android:inputType="numberSigned" 带符号数字格式
android:inputType="numberDecimal" 带小数点的浮点格式
android:inputType="phone" 拨号键盘
android:inputType="datetime" 时间日期
android:inputType="date" 日期键盘
android:inputType="time" 时间键盘
windowSoftInputMode:InputMethodManager im=(InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(view.getWindowToken(),0);//setSoftInputMode()隐藏输入法
stateUnspecified:软键盘的状态不指定,系统自动选择一个合适的状态或依赖于主题的设置
stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
stateHidden:用户选择activity时,软键盘被隐藏
stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
stateVisible:软键盘通常是可见的
stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
http://blog.csdn.net/a704755096/article/details/45845969