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.