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?

ryandlf
quelle
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.

Whiler
quelle
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

JoeyRA
quelle
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 .

Ricky
quelle
-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" />
NAGESH MH
quelle
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