这篇内容是从挺早以前的Blog剥离出来的一部分,主要记录一些开发中常见的功能场景
功能需求:首先仅支持用户数据中文、英文或数字,同时根据用户在 EditText 中输入的内容,动态显示用户的输入字数
实现效果,类似下图
使用方式
- 基础(仅支持用户数据中文、英文或数字)
mEditText.addTextChangedListener(LimitInputTextWatcher(mEditText))
- 进阶(仅支持用户数据中文、英文或数字,同时根据用户在 EditText 中输入的内容,动态显示用户的输入字数)
mEditText.addTextChangedListener(LimitInputTextWatcher(mEditText,vTvNum))
LimitInputTextWatcher
package com.jsmedia.jsmanager.view;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
public class LimitInputTextWatcher implements TextWatcher {
//et
private EditText et = null;
//tv
private TextView tv = null;
//筛选条件
private String regex;
//默认的筛选条件(正则:只能输入中文、英文、数字)
private String DEFAULT_REGEX = "[^a-zA-Z0-9\u4E00-\u9FA5]";
/**
* 构造方法
*
* @param et
*/
public LimitInputTextWatcher(EditText et) {
this.et = et;
this.regex = DEFAULT_REGEX;
}
/**
* 构造方法
*
* @param et et
* @param regex 筛选条件
*/
public LimitInputTextWatcher(EditText et, String regex) {
this.et = et;
this.regex = regex;
}
/**
* 构造方法
*
* @param et
*/
public LimitInputTextWatcher(EditText et,TextView tv) {
this.et = et;
this.tv = tv;
this.regex = DEFAULT_REGEX;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String str = editable.toString();
String inputStr = clearLimitStr(regex, str);
et.removeTextChangedListener(this);
// et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容
editable.replace(0, editable.length(), inputStr.trim());
et.addTextChangedListener(this);
tv.setText("" + editable.toString().trim().length() + "/16");
}
/**
* 清除不符合条件的内容
*
* @param regex
* @return
*/
private String clearLimitStr(String regex, String str) {
return str.replaceAll(regex, "");
}
}