Ich brauche erlauben, um Benutzer numerische Informationen in einem EditText eingeben, aber die Ausgabe muss wie "##.###,##" (# in [0..9]) formatiert werden. Die Formatierung wurde ich in einem TextWatcher gemacht... das ist gut, der TextWatcher macht den Job... aber, wenn der Benutzer den EditText auswählt, wie es als Text markiert, wird die AlphaKeyboard angezeigt, wenn ich den EditText als numerische die Tastatur auswählen, die ich brauche angezeigt wird und der TextWatcher aufhören zu arbeiten.
Antworten
Zu viele Anzeigen?Fügen Sie Folgendes in Ihre xml-Datei an der gewünschten Stelle ein
<EditText android:inputType="number" ... />
beziehen sich auf Wie zeige ich die Zahlentastatur auf einem EditText in Android?
Da Sie die Formatierung in TextWatcher vornehmen (##,####....), d.h. Sie fügen "," in EditText ein und haben den EditText als numerischen Text erstellt. Wenn der Text numerisch ist, dann ist das "," Zeichen ungültig. Daher kann der TextWatcher den formatierten Text, der "," enthält, nicht aktualisieren.
Sie haben 3 Möglichkeiten, mit diesem Problem umzugehen:
- Machen Sie den EditText als normalen Text statt als numerischen Text. Achten Sie in TextWatcher auf alle anderen ungültigen Zeichen außer 0-9. Sie können IME für Mumber Keypad anzeigen, wenn der Fokus auf dem EditText ist.
- Maske für EditText verwenden.
- Sie soll numerisch sein. Trap FocusGain & FocusLost für den EditText. In focusGain, entfernen Sie die Formatierung & setzen Sie den inputType auf Numeric. & In focusLost, machen Sie zuerst den input type auf Normal und aktualisieren Sie dann den eingegebenen Wert auf formmated value. Sie können den Eingabetyp zur Laufzeit auf Normal setzen, indem Sie
setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL);
& für die numerische Verwendung :setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
Ich glaube, dass die 1. Option am besten zu handhaben und zu bewältigen sein wird.