Wie beschränke ich meine EditText-Eingabe auf numerische (möglicherweise dezimale und vorzeichenbehaftete) Eingaben?

Lesezeit: 4 Minuten

Wie beschranke ich meine EditText Eingabe auf numerische moglicherweise dezimale und
kibibyte

Ich habe Android gelesen: EditText auf Zahlen beschränken und Wie zeige ich die Zahlentastatur auf einem EditText in Android an?. Leider scheint keiner von ihnen meinen Bedürfnissen zu entsprechen.

Ich möchte meine EditText-Eingabe auf nur Zahlen beschränken. Ich möchte jedoch auch eine vorzeichenbehaftete und/oder dezimale Eingabe zulassen.

Hier ist mein aktueller Code (ich muss dies programmgesteuert tun):

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);

Damit beschränkt my EditText fröhlich alle Eingaben auf numerische Ziffern. Leider erlaubt es nichts anderes, wie den Dezimalpunkt.

Wenn ich diese Zeile ändere in edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL), der EditText akzeptiert alle Eingaben (was ich nicht will…).

Ich habe versucht, Flags zu kombinieren (in meiner Verzweiflung, um zu sehen, ob es funktionieren würde):

edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)

Das hat auch nicht funktioniert (der EditText hat alle Eingaben wie gewohnt akzeptiert).

Also, wie mache ich das?

  • Programmatisch? Sie wären also gegen eine XML-Layout-Lösung?

    – Phil

    2. August ’11 um 22:51

  • Ich wäre nicht dagegen, solange ich einen EditText im Handumdrehen erstellen kann.

    – kibibyte

    3. August ’11 um 1:54

Es gibt keinen Grund zu verwenden setRawInputType(), benutz einfach setInputType(). Sie müssen jedoch die Klasse und die Flags mit dem OR-Operator kombinieren:

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

  • Gibt einen Aufwärtstick, wenn Sie auch den XML-Code zum Setzen dieser Flags anzeigen.

    – Matt Stevens

    2. Januar ’14 um 1:44

  • Dies ist nicht ausreichend. Sie können weiterhin mehrere Dezimalstellen eingeben. Das ist keine gültige Zahl.

    – Andreas

    9. Okt. 14 um 19:40 Uhr

  • Manchmal lässt mich Android meine Haare ausreißen. Warum ist etwas so Einfaches so unglaublich schwer und fehleranfällig?

    – DiscDev

    17. September ’15 um 19:36

  • Verdammt alles versucht … jetzt frage ich mich, ob es in einem einzelnen oder statischen dynamischen Edittext mit einem einfachen Eingabetyp mit einer Anweisung funktioniert, mit mehreren dynamischen et (et in einem Array) muss ich nicht hierher kommen, um zu retten.. danke Mann

    – Nasz Njoka sen.

    2. März ’16 um 11:19

  • Beachten Sie, dass das Flag mit Vorzeichen nicht benötigt wird, wenn Sie keine negativen Werte zulassen möchten

    – Bart Burg

    26. Juni ’18 um 14:04

Versuchen Sie es mit TextView.setRawInputType() es entspricht dem android:inputType Attribut.

  • Wie genau würde ich das aufrufen? Rufe ich die Anrufe einfach in einer Kette auf?

    – kibibyte

    3. August ’11 um 1:50

  • mit deinem Beispielcode: edit.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

    – Dan S

    3. August ’11 um 4:02


  • Hey, es ist in Ordnung, ich habe gerade den Setter ausgewählt, der dem Android-Eingabetyp zugeordnet ist. Ich freue mich, dass Sie es gefunden haben und ich war in der Nähe. Ja, es ist nur eine kleine Maske mit Flaggen, nicht alle, aber viele.

    – Dan S

    3. August ’11 um 4:19

  • Was war die Lösung? mit diesen erhalte ich immer noch Schlüssel, die ich nicht möchte, wie “*”,”#”, und parentesis, etc…ich will nur Zahlen und -/+/. Zeichen, wie geht das?

    – Maxrunner

    9. Dezember ’13 um 19:23

  • Überprüf den InputType-Referenz für mehr Details.

    – Dan S

    9. Dezember ’13 um 23:40

Wie beschranke ich meine EditText Eingabe auf numerische moglicherweise dezimale und
Vlad

Benutze das. Funktioniert gut

input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));

BEARBEITEN

Kotlin-Version

fun EditText.onlyNumbers() {
    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
        InputType.TYPE_NUMBER_FLAG_SIGNED
    keyListener = DigitsKeyListener.getInstance("0123456789")
}

  • Es ist das, was ich will, danke

    – Hossein Kurd

    6. November ’17 um 12:17

  • Darf ich wissen, wie man ihnen erlaubt, nur 11 Zahlen einzugeben? @V.Kalyuzhnyu

    – Leon Zaii

    31. Okt. 18 um 4:14 Uhr

  • @LeonZaii erlaubt nur die Eingabe von “1” und überprüft, ob die Stringlänge durch zwei teilbar ist

    – Vlad

    31. Okt ’18 um 6:17

füge diese Zeile ein xml

 android:inputType="number|numberDecimal"

  • Schön! Ich kann nicht einmal schlechte Zeichen kopieren und einfügen! (Ja, ich weiß, wie man auf Android kopiert und einfügt;)

    – Philipp

    19. Dezember ’19 um 22:53

  • Jetzt muss ich nur noch den Benutzer benachrichtigen, wenn er a . eingibt 0, was immer noch verboten ist…

    – Philipp

    19. Dezember ’19 um 22:55

Hallo zusammen Dieses Problem hatte ich auch. Ich verwende C# mit Xamarin

Nur eine kleine Anmerkung, die ich hoffe, jemand anderen auch.

Ich habe mehrere der hier genannten Methoden ausprobiert.

edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);

war am nächsten, hat aber immer noch nicht funktioniert. Wie Ralf erwähnte, könntest du gebrauchen

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

In meinem C# hatte ich dies jedoch nicht. stattdessen machst du es wie folgt:

edittext1.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;

Bitte beachten Sie, dass die Reihenfolge dieser wichtig ist. Wenn Sie Dezimal an erster Stelle setzen, können Sie trotzdem beliebige Zeichen eingeben, wobei Wenn Zahl an erster Stelle steht, ist es nur numerisch, erlaubt jedoch ein Dezimaltrennzeichen!

  • Nicht programmatisch schaffe ich das mit just android:inputType="numberDecimal"

    – mgabz

    19. Sept. 17 um 16:08 Uhr

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);

  • Nicht programmatisch schaffe ich das mit just android:inputType="numberDecimal"

    – mgabz

    19. Sept. 17 um 16:08 Uhr

Um den Eingabetyp von EditText als Dezimalzahl festzulegen, verwenden Sie diesen Code:

EditText edit = new EditText(this);
edit.SetRawInputType(Android.Text.InputTypes.NumberFlagDecimal | Android.Text.InputTypes.ClassNumber);

.

222140cookie-checkWie beschränke ich meine EditText-Eingabe auf numerische (möglicherweise dezimale und vorzeichenbehaftete) Eingaben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy