Wie kann ich in EditText in Android nur Alphabete eingeben?
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,";
}
Fügen Sie diese Zeile mit Ihrem EditText-Tag hinzu.
Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Ihr EditText-Tag sollte folgendermaßen aussehen:
<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 "";
}
}
});
bitte aber gründlich testen!
Durch XML können Sie einfach folgenden Code in XML (editText) eingeben ...
Android:digits="abcdefghijklmnopqrstuvwxyz"
nur Zeichen werden akzeptiert ...
Für diejenigen, die möchten, dass ihr editText nur Alphabete und Leerzeichen (weder Ziffern noch Sonderzeichen) akzeptiert, kann diese InputFilter
..__ verwendet werden. Hier habe ich eine Methode namens getEditTextFilter()
erstellt und den Eingabefilter darin geschrieben.
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();
}
};
}
Fügen Sie diesen inputFilter wie folgt an Ihren editText an, nachdem Sie ihn gefunden haben:
mEditText.setFilters(new InputFilter[]{getEditTextFilter()});
Der ursprüngliche Kredit geht an @UMAR, der die Idee der Überprüfung mit regulären Ausdrücken und @KamilSeweryn gegeben hat
Fügen Sie die Code-Edittext-XML-Datei ein.
Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Erlaube nur Alphabete in EditText Android:
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});
Für Leerzeichen können Sie den Ziffern ein einzelnes Leerzeichen hinzufügen. Wenn Sie Sonderzeichen wie Punkt oder Komma benötigen, können Sie auch diese Liste verwenden
Android: Digits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Versuche dies
<EditText
Android:id="@+id/EditText1"
Android:text=""
Android:inputType="text|textNoSuggestions"
Android:textSize="18sp"
Android:layout_width="80dp"
Android:layout_height="43dp">
</EditText>
Anderer inputType kann gefunden werden Hier ..
Wenn noch jemand dies wünscht, Java-Regex für die Unterstützung von Unicode? ist ein guter. Es ist für, wenn Sie NUR Buchstaben (egal welche Kodierung - japanisch, Schwedisch) neben EditText haben möchten. Später können Sie es mit Matcher
und Pattern.compile()
überprüfen.