Programowe ustawianie cyfr EditText

86

Zasadniczo próbuję programowo ustawić wartość cyfr w EditText. Jak dotąd mam:

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

Co jest w porządku, ale chcę też mieć możliwość uwzględnienia miejsca dziesiętnego (.). Jakieś pomysły?

ryandlf
źródło
1
Prawdopodobnie wolałbyś użyć DialerKeyListenerzamiastDigitsKeyListener
Dmitry Gryazin

Odpowiedzi:

206

Spróbuj tego:

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

Z kodu:

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

Ale pozwala użytkownikowi dołączyć kilka „.” Zobacz odpowiedź JoeyRA na liczby rzeczywiste.

Whiler
źródło
To dobrze, ale chcę to zrobić programowo. Powodem tego jest to, że chcę ponownie użyć jednego układu w wielu sytuacjach, ponieważ te cyfry są jedyną zmienną, która stale się zmienia. Robienie tego w kodzie jest w mojej sytuacji dużo skuteczniejsze.
ryandlf
2
Dzięki. Właściwie uważam, że ta odpowiedź zasługuje na znacznik wyboru, ponieważ jest specyficzna dla tego, o co prosiłem, ale oba rozwiązania działają.
ryandlf
@feresr, to dziwne, bo patrząc na TextViewźródła: // 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
Jaki jest pożytek .po 9?
Mitesh Shah
1
@MiteshShah pozwala na miejsce po przecinku.
masterwok
30

Spróbuj tego:

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) 

Zwraca DigitsKeyListener, który akceptuje cyfry od 0 do 9 oraz znak minus (tylko na początku) i / lub przecinek dziesiętny (tylko jeden na pole), jeśli został określony.

To rozwiązuje problem wielu „.” w EditText

JoeyRA
źródło
1
Po prostu dodaj wyjaśnienie: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); aby włączyć liczby dziesiętne i ujemne. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); aby włączyć tylko dodatnie liczby dziesiętne. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); aby włączyć tylko dodatnie liczby całkowite.
SerSánGal
8
Pytanie: jeśli setInputTyperaz po raz, czy nie zastąpi to drugiego do pierwszego? Myślę, że powinieneś użyć, weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);ale nie jestem w 100% pewien
Rafael Ruiz Muñoz
20

Użyj InputType.TYPE_NUMBER_FLAG_DECIMAL.

Zobacz także: Typy danych wejściowych .

Ricky
źródło
-1? Na pewno tego nie zrobiłem. Twoje rozwiązanie zadziałało, dziękuję.
ryandlf
Wygląda na to, że zostało cofnięte. Miło, że mogłem pomóc.
Ricky
4

Do wprowadzania adresu IP (wiele kropek i cyfr)

próbować

<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
źródło
1
Należy pamiętać, że szesnastkowe adresy IP (z częściami zaczynającymi się od 0x) są również prawidłowe, a zamiast adresu IP można użyć nazwy domeny.
Triang3l