2016-06-14 12 views
0

Ich habe einen Android EditText, dass ich die Nummerntastatur haben möchte.Konfigurieren Sie Android EditText so, dass Dezimalzahlen und Zahlen zulässig sind. Beginnen Sie nicht mit '.' oder '00' und '000' und so weiter

Wenn ich die android:inputType auf numberdecimal|number setze, bekomme ich die Zahlentastatur und die Fähigkeit, Dezimal und Zahl einzugeben. aber es kann '.00222''0000' sonst eingeben, es ist nicht meine wollen, Und wenn ich Projekt um android 4.4.2 kompilieren und es funktioniert, dass meine erwartet, aber Android 6.0 verwenden, ist es nicht meine erwartet. Wie erhalten Sie die Zahlentastatur mit der Möglichkeit, Dezimalzahlen und Zahlen in Android 6.0 einzugeben?

+1

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

+0

"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

+0

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. –

Antwort

2

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)});