Impostare le cifre EditText a livello di programmazione


89

Sto essenzialmente cercando di impostare il valore delle cifre di un EditText a livello di codice. Finora ho:

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

Il che va bene, ma voglio anche essere in grado di includere un punto decimale (.). Qualche idea?


1
Probabilmente preferiresti usare al DialerKeyListenerposto diDigitsKeyListener
Dmitry Gryazin

Risposte:


208

Prova questo:

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

Dal codice:

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

Tuttavia, consente all'utente di includere diversi "." Vedi la risposta di JoeyRA per i numeri reali.


Va bene, ma voglio farlo in modo programmatico. La ragione di ciò è perché voglio riutilizzare un layout in più situazioni poiché questa cifra è l'unica variabile che cambia costantemente. Farlo in codice è molto più efficace nella mia situazione.
ryandlf

2
Grazie. In realtà sento che questa risposta merita il segno di spunta perché è specifica per ciò che ho chiesto, ma entrambe le soluzioni funzionano.
ryandlf

@feresr, è strano, perché guardando le TextViewfonti: // 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.
Dmitry Gryazin

A cosa serve .dopo le 9?
Mitesh Shah

1
@MiteshShah consente la posizione decimale.
masterwok

30

Prova questo:

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) 

Restituisce un DigitsKeyListener che accetta le cifre da 0 a 9, più il segno meno (solo all'inizio) e / o il punto decimale (solo uno per campo) se specificato.

Questo risolve il problema dei molti "." in EditText


1
Basta aggiungere una precisazione: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); per abilitare decimali e numeri negativi. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); per abilitare solo numeri decimali positivi. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); per abilitare solo numeri interi positivi.
SerSánGal

8
Domanda: se lo fai setInputTypeancora una volta, non sovrascriverà il secondo al primo? Penso che dovresti usare weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);ma non ne sono sicuro al 100%
Rafael Ruiz Muñoz

20

Usa InputType.TYPE_NUMBER_FLAG_DECIMAL.

Vedi anche: Tipi di input .


-1? Sicuramente non l'ho fatto. La tua soluzione ha funzionato, grazie.
ryandlf

Sembra che sia stato ripristinato. Felice di aiutare.
Ricky

4

Per l'immissione dell'indirizzo IP (più punti e numeri)

provare

<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
Si noti che anche gli indirizzi IP esadecimali (con parti che iniziano con 0x) sono validi e il nome di dominio può essere utilizzato al posto dell'indirizzo IP.
Triang3l

0

se qualcuno sta ancora trovando il modo corretto, nota che setRawInputType()non lo èsetInputType()

val digits = "ABCDabcd" // or any characters you want to allow
editText.keyListener = DigitsKeyListener.getInstance(digits) 
editText.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.