Es ist ein bisschen spät, um meinen Vorschlag zu posten, aber ich denke, es könnte anderen helfen.
Wenn der Eingabetyp wie "android: inputType =" numberDecimal "auf" NumberDecimal "eingestellt ist (dh um eine Tastatur mit nur verfügbaren Zahlen und Dezimalstellen zu erhalten), können Sie einen Eingabefilter einrichten, um die Eingabe von Benutzern zu verhindern Nummer, die Sie nicht möchten ".XX", "00" usw. finden Sie unten für das Beispiel.
public class NumberDecimalInputFilter implements InputFilter {
private int numbOfDigitsAfterDecimalPoint_;
private boolean firstDigitIsZero_;
public NumberDecimalInputFilter(int numbOfDigitsAfterDecimalPoint) {
numbOfDigitsAfterDecimalPoint_ = numbOfDigitsAfterDecimalPoint;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
int dotPosition = -1;
int desLength = dest.length();
if (desLength == 0) {
if (source.equals(".")) { //do not allow nothing preceding the dot
return "";
}
firstDigitIsZero_ = source.equals("0") ? true : false;
}
if (firstDigitIsZero_ && desLength == 1 && !source.equals(".")) { //only allow a dot follows the first 0, i.e., to prevent 00, 01 or 001 ...
return "";
}
for (int i = 0; i < desLength; i++) {
char c = dest.charAt(i);
if (c == '.' || c == ',') {
dotPosition = i;
break;
}
}
if (dotPosition >= 0) {
// protects against many dots
if (source.equals(".") || source.equals(",")) {
return "";
}
// if the text is entered before the dot
if (dend <= dotPosition) {
return null;
}
if (desLength - dotPosition > numbOfDigitsAfterDecimalPoint_) {
return "";
}
}
return null;
}
}
Verwendung - Legen Sie den Bearbeitungstext so fest, dass nur zwei Nachkommastellen zulässig sind.
EditTextInstance.setFilters(new InputFilter[] {new NumberDecimalInputFilter(2)});
AFAIK gibt es keinen anderen Weg als die Eingabe Validierung ... 'android: inputType' ist nur ein Hinweis ... und da Sie benutzerdefinierte Tastaturen auf Android haben können, gibt es keine gemeinsame Art und Weise, dies zu tun .. Versuchen Sie, die Eingabe bei jeder Textänderung selbst zu überprüfen – Selvin
"Wenn ich den android: inputType auf numberdecimal | Nummer setze, bekomme ich die Zahlentastatur und die Fähigkeit, Dezimal und Zahl einzugeben" - nicht unbedingt. Es gibt Tausende von Android-Gerätemodellen. Diese werden mit Hunderten von Soft-Tastaturen ausgeliefert und Benutzer können andere aus dem Play Store installieren. Wie Selvin bemerkt, ist 'android: inputType' ein Hinweis, kein Bedarf. Was jede Tastatur in Bezug auf den gewünschten 'inputType' tut, liegt bei den Entwicklern der Tastatur, nicht bei Ihnen **. – CommonsWare
Sie können textWatcher auf edittext setzen und die Eingabe in der afterTextChanged-Funktion überprüfen. Wenn der Benutzer ein beliebiges Zeichen eingibt, das für Ihre Anforderung nicht geeignet ist, entfernen Sie das letzte Zeichen und bewegen Sie den Cursor ein Zeichen zurück. –