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?


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.


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


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


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" />

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.