如何创建EditText接受的字母,只有在安卓?
-
23-09-2019 - |
题
我怎么可以只进入字母EditText在。
解决方案 3
EditText state = (EditText) findViewById(R.id.txtState);
Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
Matcher ms = ps.matcher(state.getText().toString());
boolean bs = ms.matches();
if (bs == false) {
if (ErrorMessage.contains("invalid"))
ErrorMessage = ErrorMessage + "state,";
else
ErrorMessage = ErrorMessage + "invalid state,";
}
其他提示
添加此行与你的EditText标签。
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
您的EditText标签应该是这样的:
<EditText
android:id="@+id/editText1"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
edittext.setFilters(new InputFilter[] {
new InputFilter() {
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend) {
if(src.equals("")){ // for backspace
return src;
}
if(src.toString().matches("[a-zA-Z ]+")){
return src;
}
return "";
}
}
});
请测试彻底虽然!
对于那些谁希望自己的EDITTEXT应该只接受字母和空格(既不NUMERICS也没有任何特殊字符),那么就可以使用这个InputFilter
。
在这里,我已经创建了一个方法名为getEditTextFilter()
并写入它里面的输入过滤。
public static InputFilter getEditTextFilter() {
return new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
boolean keepOriginal = true;
StringBuilder sb = new StringBuilder(end - start);
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (isCharAllowed(c)) // put your condition here
sb.append(c);
else
keepOriginal = false;
}
if (keepOriginal)
return null;
else {
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(sb);
TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
return sp;
} else {
return sb;
}
}
}
private boolean isCharAllowed(char c) {
Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
Matcher ms = ps.matcher(String.valueOf(c));
return ms.matches();
}
};
}
附加这InputFilter输入您的EDITTEXT发现它之后,如下所示:
mEditText.setFilters(new InputFilter[]{getEditTextFilter()});
在原来归功于@UMAR谁给了使用正则表达式和@KamilSeweryn
验证的想法通过XML可以很容易地做到如以下类型中XML代码(EDITTEXT)...
android:digits="abcdefghijklmnopqrstuvwxyz"
<强>仅字符将被接受... 强>
把代码的EditText xml文件,
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
允许仅在字母的EditText机器人:强>
InputFilter letterFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String filtered = "";
for (int i = start; i < end; i++) {
char character = source.charAt(i);
if (!Character.isWhitespace(character)&&Character.isLetter(character)) {
filtered += character;
}
}
return filtered;
}
};
editText.setFilters(new InputFilter[]{letterFilter});
有关空格,则可以在数字添加单个空格。如果您需要任何特殊字符,如点,逗号也可以添加到这个列表
机器人:位数= “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
如果有人仍然想要这个, Java regex支持Unicode? 是一个很好的一个。这是因为当你想要的只有字母(无论什么样的编码-日本,瑞典文)的一个EditText.后来,你可以检查它使用 Matcher
和 Pattern.compile()
尝试此
<EditText
android:id="@+id/EditText1"
android:text=""
android:inputType="text|textNoSuggestions"
android:textSize="18sp"
android:layout_width="80dp"
android:layout_height="43dp">
</EditText>
其他的inputType可以发现 这里 ..
不隶属于 StackOverflow