Stellen Sie EditText Digits programmgesteuert ein


86

Ich versuche im Wesentlichen, den Ziffernwert eines EditText programmgesteuert festzulegen. Bisher habe ich:

weightInput.setInputType(InputType.TYPE_CLASS_PHONE);
weightInput.setKeyListener(DigitsKeyListener.getInstance());

Was in Ordnung ist, aber ich möchte auch eine Dezimalstelle (.) Einfügen können. Irgendwelche Ideen?


1
Sie würden wahrscheinlich lieber DialerKeyListeneranstelle vonDigitsKeyListener
Dmitry Gryazin

Antworten:


202

Versuche dies:

<EditText
    android:inputType="number"
    android:digits="0123456789."
/>

Aus dem Code:

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

Der Benutzer kann jedoch mehrere "." Siehe JoeyRAs Antwort für reelle Zahlen.


Das ist in Ordnung, aber ich möchte dies programmatisch tun. Grund dafür ist, dass ich ein Layout in mehreren Situationen wiederverwenden möchte, da diese Ziffern die einzige Variable sind, die sich ständig ändert. In Code zu machen ist in meiner Situation viel effektiver.
Ryandlf

2
Vielen Dank. Ich bin der Meinung, dass diese Antwort das Häkchen verdient, da sie spezifisch für das ist, wonach ich gefragt habe, aber beide Lösungen funktionieren.
Ryandlf

@feresr, das ist seltsam, weil man sich TextViewQuellen // If no input type was specified, we will default to generic text, since we can't tell the IME about the set of digits that was selected.
ansieht

Was nützt es .nach 9?
Mitesh Shah

1
@MiteshShah erlaubt Dezimalstelle.
Masterwok

29

Versuche dies:

weightInput.setInputType(InputType.TYPE_CLASS_NUMBER);          
weightInput.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);           
weightInput.setKeyListener(DigitsKeyListener.getInstance(false,true));

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

Gibt einen DigitsKeyListener zurück, der die Ziffern 0 bis 9 sowie das Minuszeichen (nur am Anfang) und / oder den Dezimalpunkt (nur eines pro Feld) akzeptiert, falls angegeben.

Dies löst das Problem über die vielen '.' in EditText


1
Fügen Sie einfach eine Klarstellung hinzu: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); um Dezimalstellen und negative Zahlen zu aktivieren. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); um nur positive Dezimalzahlen zu aktivieren. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); um nur positive ganze Zahlen zu aktivieren.
SerSánGal

8
Frage: Wenn Sie es immer setInputTypewieder tun, wird es dann nicht den zweiten zum ersten überschreiben? Ich denke, Sie sollten verwenden, weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);aber ich bin nicht 100% sicher
Rafael Ruiz Muñoz

20

Verwenden Sie InputType.TYPE_NUMBER_FLAG_DECIMAL.

Siehe auch: Eingabetypen .


-1? Das habe ich sicher nicht gemacht. Ihre Lösung hat funktioniert, danke.
Ryandlf

Scheint, als wäre es zurückgesetzt worden. Froh, dass ich Helfen kann.
Ricky

4

Zur Eingabe der IP-Adresse (mehrere Punkte und Zahlen)

Versuchen

<EditText
    android:id="@+id/ipBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/ipAddrHint"
    android:inputType="numberDecimal|number"
    android:digits="0123456789."
    android:textSize="30sp" />

1
Bitte beachten Sie, dass hexadezimale IP-Adressen (mit Teilen, die mit 0x beginnen) ebenfalls gültig sind und der Domainname anstelle der IP-Adresse verwendet werden kann.
Triang3l
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.