在项目中用到的关于Edittext的一些收集
..................
Edittext禁止输入emoji表情
InputFilter 正则表达式:
InputFilter emojiFilter = new InputFilter() {
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
ToastUtils.showShort("不支持输入表情");
return "";
}
return null;
}
};
edt.setFilters(new InputFilter[]{emojiFilter});
EditText 限制只能输入字母和数字,并且字母自动大写
限制只能输入字母和数字:
android:inputType="textEmailAddress"//弹出字母键盘
android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"//数字和字母
将输入的小写字母自动转化为大写字母
//首先是小写转大写的方法
public class UpperCaseTransform extends ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] aa = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
return aa;
}
@Override
protected char[] getReplacement() {
char[] cc = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
return cc;
}
}
//然后是设置
editText.setTransformationMethod(new UpperCaseTransform());
自动隐藏输入的密码
//从密码不可见模式变为密码可见模式
et_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
//从密码可见模式变为密码不可见模式
et_password.setTransformationMethod(PasswordTransformationMethod.getInstance())
EditText 限制两位小数点后几位
//创建MoneyValueFilter
public class MoneyValueFilter extends DigitsKeyListener {
private static final String TAG = "MoneyValueFilter";
public MoneyValueFilter() {
super(false, true);
}
private int digits = 2;
public MoneyValueFilter setDigits(int d) {
digits = d;
return this;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
CharSequence out = super.filter(source, start, end, dest, dstart, dend);
// if changed, replace the source
if (out != null) {
source = out;
start = 0;
end = out.length();
}
int len = end - start;
// if deleting, source is empty
// and deleting can't break anything
if (len == 0) {
return source;
}
//以点开始的时候,自动在前面添加0
if(source.toString().equals(".") && dstart == 0){
return "0.";
}
//如果起始位置为0,且第二位跟的不是".",则无法后续输入
if(!source.toString().equals(".") && dest.toString().equals("0")){
return "";
}
int dlen = dest.length();
// Find the position of the decimal .
for (int i = 0; i < dstart; i++) {
if (dest.charAt(i) == '.') {
// being here means, that a number has
// been inserted after the dot
// check if the amount of digits is right
return (dlen-(i+1) + len > digits) ?
"" :
new SpannableStringBuilder(source, start, end);
}
}
for (int i = start; i < end; ++i) {
if (source.charAt(i) == '.') {
// being here means, dot has been inserted
// check if the amount of digits is right
if ((dlen-dend) + (end-(i + 1)) > digits)
return "";
else
break; // return new SpannableStringBuilder(source, start, end);
}
}
// if the dot is after the inserted part,
// nothing can break
return new SpannableStringBuilder(source, start, end);
}
}
//使用
mEditText.setFilters(new InputFilter[]{new MoneyValueFilter().setDigits(3)});
禁止EditText输入空格
/**
* 禁止EditText输入空格
* @param editText
*/
public static void setEditTextInhibitInputSpace(EditText editText){
InputFilter filter=new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if(source.equals(" "))return "";
else return null;
}
};
editText.setFilters(new InputFilter[]{filter});
}
/**
* 禁止EditText输入空格和换行符
*
* @param editText EditText输入框
*/
public static void setEditTextInputSpace(EditText editText) {
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source.equals(" ") || source.toString().contentEquals("\n")) {
return "";
} else {
return null;
}
}
};
editText.setFilters(new InputFilter[]{filter});
}
禁止EditText输入特殊字符
/**
*
* @param editText
*/
public static void setEditTextInhibitInputSpeChat(EditText editText){
InputFilter filter=new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern pattern = Pattern.compile(speChat);
Matcher matcher = pattern.matcher(source.toString());
if(matcher.find())return "";
else return null;
}
};
editText.setFilters(new InputFilter[]{filter});
}