Das inputType
numberDecimal
in EditText
verwendet den Punkt '.' als Dezimaltrennzeichen. In Europa ist es üblich, stattdessen ein Komma zu verwenden. Obwohl mein Gebietsschema auf Deutsch eingestellt ist, ist das Dezimaltrennzeichen immer noch das '.'
Gibt es eine Möglichkeit, das Komma als Dezimaltrennzeichen zu erhalten?
Antworten:
Eine Problemumgehung (bis Google diesen Fehler behoben hat) ist die Verwendung von
EditText
withandroid:inputType="numberDecimal"
undandroid:digits="0123456789.,"
.Fügen Sie dann dem EditText einen TextChangedListener mit dem folgenden afterTextChanged hinzu:
quelle
Eine Variation der hier angebotenen "Digit" -Lösungen:
Berücksichtigung des Gebietsschema-Trennzeichens.
quelle
,
in ihren Tastaturen haben. Beispiele: Samsung-Tastatur (KitKat).Folgende Code-Währungsmaske für EditText ($ 123.125,155)
XML-Layout
Code
quelle
Dies ist ein bekannter Fehler im Android SDK. Die einzige Problemumgehung besteht darin, eine eigene Softtastatur zu erstellen. Ein Beispiel für die Implementierung finden Sie hier .
quelle
Martins Antwort funktioniert nicht, wenn Sie den EditText programmgesteuert instanziieren. Ich habe die eingeschlossene
DigitsKeyListener
Klasse von API 14 geändert , um sowohl Komma als auch Punkt als Dezimaltrennzeichen zu berücksichtigen.Rufen Sie dazu
setKeyListener()
dieEditText
zSie müssen jedoch immer noch Martins Trick verwenden
TextChangedListener
, um Kommas durch Punkte zu ersetzenquelle
Sie können Folgendes für verschiedene Gebietsschemas verwenden
quelle
Sie können die folgende Problemumgehung verwenden, um auch Komma als gültige Eingabe einzufügen: -
Durch XML:
Programmatisch:
Auf diese Weise zeigt das Android-System die Tastatur der Zahlen an und ermöglicht die Eingabe von Kommas. Hoffe das beantwortet die Frage :)
quelle
Für Mono (Droid) -Lösungen:
quelle
Sie können Folgendes tun:
Und dann könnten Sie einen Eingabefilter verwenden:
}}
quelle
IMHO ist der beste Ansatz für dieses Problem, nur den InputFilter zu verwenden. Ein netter Kern ist hier DecimalDigitsInputFilter . Dann können Sie einfach:
quelle
Um Ihre Eingabe zu lokalisieren, verwenden Sie:
und dann hinzufügen:
dann vergessen Sie nicht, "," durch "zu ersetzen." Float oder Double können es also fehlerfrei analysieren.
quelle
Alle anderen Beiträge hier hatten große Löcher, daher hier eine Lösung, die:
In der XML:
Klassenvariable:
Suchen Sie in onCreate das Trennzeichen, das im aktuellen Gebietsschema verwendet wird:
Verwenden Sie dies auch onCreate, um es zu aktualisieren, wenn Sie einen aktuellen Wert laden:
Fügen Sie auch onCreate die Listener hinzu
editTextWatcher
Beispiel doSomething (): Konvertieren Sie zur Datenmanipulation in den Standardzeitraum
quelle
Android hat einen eingebauten Zahlenformatierer.
Sie können dies zu Ihrem hinzufügen
EditText
, um Dezimalstellen und Kommas zuzulassen:android:inputType="numberDecimal"
undandroid:digits="0123456789.,"
Dann irgendwo in Ihrem Code, entweder wenn der Benutzer auf Speichern klickt oder nachdem Text eingegeben wurde (verwenden Sie einen Listener).
quelle
Ich habe beschlossen, das Komma nur während der Bearbeitung in Punkt zu ändern. Hier ist meine knifflige und relativ einfache Problemumgehung:
someDecimalFormatter verwendet Komma oder Punkt, abhängig vom Gebietsschema
quelle
Ich weiß nicht, warum Ihre Antworten so kompliziert sind. Wenn es einen Fehler im SDK gibt, müssen Sie ihn überschreiben oder umgehen.
Ich habe den zweiten Weg gewählt, um dieses Problem zu lösen. Wenn Sie Ihre Zeichenfolge als formatieren
Locale.ENGLISH
und dann in dieEditText
Zeichenfolge (auch als leere Zeichenfolge) einfügen. Beispiel:String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
Wenn Sie dieser Lösung nachjagen, ist Ihr Ergebnis mit der angezeigten Tastatur kompatibel. Dann arbeiten Gleitkomma- und Doppelnummern in der für Programmiersprachen typischen Weise mit Punkt anstelle von Komma.
quelle
Meine Lösung ist:
In der Haupttätigkeit:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
In der XML-Datei:
android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"
und ich habe das Double im editText als String genommen.
quelle
Ich kann bestätigen, dass die vorgeschlagenen Korrekturen nicht auf Samsung IMEs (zumindest auf S6 und S9) und möglicherweise auf LG funktionieren. Sie zeigen immer noch einen Punkt als Dezimaltrennzeichen, unabhängig vom Gebietsschema. Der Wechsel zu Googles IME behebt dieses Problem, ist jedoch für die meisten Entwickler kaum eine Option.
Es wurde auch nicht in Oreo für diese Tastaturen behoben, da es eine Korrektur ist, die Samsung und / oder LG vornehmen müssen, um dann sogar auf ihre alten Handys zu pushen.
Ich habe stattdessen das Ziffern -Tastatur-Projekt gegabelt und einen Modus hinzugefügt, in dem es sich wie eine IME: Gabel verhält . Einzelheiten finden Sie im Projektbeispiel. Dies hat für mich ganz gut funktioniert und ähnelt vielen der gefälschten IMEs mit "PIN-Eingabe", die Sie in Banking-Apps sehen.
quelle
Es ist mehr als 8 Jahre vergangen und ich bin überrascht, dass dieses Problem noch nicht behoben ist ...
Ich hatte mit diesem einfachen Problem zu kämpfen, da die am besten bewertete Antwort von @Martin die Eingabe mehrerer Trennzeichen ermöglicht, dh der Benutzer kann "12 ,," eingeben. ,,, 12,1 ,, 21,2, "
Außerdem besteht das zweite Problem darin, dass bei einigen Geräten das Komma auf der numerischen Tastatur nicht angezeigt wird (oder das mehrfache Drücken einer Punkttaste erforderlich ist).
Hier ist meine Problemumgehungslösung, die die genannten Probleme löst und es dem Benutzer ermöglicht, "einzugeben". und ',', aber in EditText wird das einzige Dezimaltrennzeichen angezeigt, das dem aktuellen Gebietsschema entspricht:
Und der Textbeobachter:
quelle
Einfache Lösung, machen Sie ein benutzerdefiniertes Steuerelement. (Dies ist in Xamarin Android gemacht, sollte aber leicht auf Java portieren)
quelle
Sie könnten verwenden
inputType="phone"
, aber in diesem Fall müssten Sie sich mit mehreren befassen,
oder.
anwesend sein, so dass eine zusätzliche Validierung erforderlich wäre.quelle
Ich denke, diese Lösung ist weniger komplex als die anderen hier geschriebenen:
Auf diese Weise, wenn Sie das '.' Drücken. in der Softtastatur passiert nichts; Es sind nur Zahlen und Kommas zulässig.
quelle