jak ustawić tylko wartość liczbową dla edittext w Androidzie?


209

Mam wartość, edittextw której chcę wstawić tylko wartości całkowite. Czy ktoś może mi powiedzieć, z której nieruchomości mam korzystać?

Odpowiedzi:


403

Chyba android:inputType="number"atrybuty XML.


11
Człowieku, uwielbiam programistów Androida ... takie zamieszanie, aby uzyskać tę opcję na stronach internetowych!
Alex

14
Cześć, w Androidzie 2.3.3 jest to „numberSigned”. Właśnie to tutaj napisałem, na wypadek, gdyby ktoś tego szukał :)
Sok Cytrynowy

Co się stanie, jeśli mój editText pojawi się w oknie dialogowym, a zatem zadeklaruję go tylko w kodzie .java? tzn. okno dialogowe editText nie pojawia się w pliku XML. Jak mogę to nadal osiągnąć?
Sibbs Gambling

1
Ponadto możesz użyć android:inputType="phone"zamiast tego. Ale wydaje się nieco bardziej „zajęty”.
Chad Bingham

126

Na przykład:

<EditText
android:id="@+id/myNumber"
android:digits="0123456789."
android:inputType="numberDecimal"
/>

3
To najlepsze rozwiązanie!
RRTW,

2
Zakładam, że napis powinien czytać, 0123456789.a nie czytać0123456780.
audiFanatic

Działa to również z Androidem: inputType = "number"! Potrzebowałem go, aby uniemożliwić użytkownikom wpisywanie operatorów, nawiasów itp. Na klawiaturze numerycznej. Co za uratowanie życia, stary! Witamy w Costco; Kocham Cię!
gonzobrains

2
To nie pozwoli ci wstawiać liczb ujemnych, a jednocześnie pozwoli na zduplikowanie miejsc po przecinku. (
Np.

Fajnie, dodając Androida: cyfry obsługują również kopiowanie i wklejanie.
StoneLam

107

W kodzie możesz to zrobić

ed_ins.setInputType(InputType.TYPE_CLASS_NUMBER);

@MohamedKhamis to nazwa
EditText

1
Sourabh poprosił o „Wstawić tylko wartości całkowite”. Pozwala to wprowadzić znacznie więcej.
Zon

30

Aby wprowadzić tylko cyfry, użyj android:inputType="numberPassword"wraz z, editText.setTransformationMethod(null);aby usunąć automatyczne ukrywanie numeru.

LUB

android:inputType="phone"

W przypadku wprowadzania tylko cyfr uważam, że te kilka sposobów jest lepszych niż android:inputType="number". Ograniczenie wymieniania „liczby” jako inputType polega na tym, że klawiatura umożliwia przełączanie się na znaki, a także umożliwia wprowadzanie innych znaków specjalnych. „NumberPassword” inputType nie ma tych problemów, ponieważ klawiatura pokazuje tylko cyfry. Nawet wejście „telefon” działa, ponieważ klawiatura nie pozwala na przełączanie się na znaki. Ale nadal możesz wprowadzić kilka znaków specjalnych, takich jak +, /, N itp.

android: inputType = "numberPassword" z editText.setTransformationMethod (null);

inputType = "numberPassword"

inputType = „telefon”

inputType = „telefon”

inputType = „number”

inputType = „number”


1
To jest doskonałe! android:inputType="numberPassword"wraz zeditText.setTransformationMethod(null);
coderpc

ta wskazówka czyni moją aplikację idealną.
Kernelzero,

6
android:inputType="numberDecimal"

5
To świetnie, ale system liczb całkowitych nie zawiera liczb dziesiętnych.
RileyE

@RileyE Co przez to rozumiesz? Właśnie zaczęliśmy używać tego do wszystkich danych liczbowych i chcę się upewnić, że czegoś nie umknie. Dzięki!
Joshua Pinter


2

skorzystanie z poniższych może lepiej rozwiązać problem;

w xml:

<EditText
      android:id="@+id/age"
      android:inputType="numberDecimal|numberSigned"        />

lub // w działaniu wewnątrz etfield.addtextchangelistener

     private String blockCharacterSet="+(/)N,*;#";//declare globally
               try {
                for (int i = 0; i < s.length(); i++) {


                    if (blockCharacterSet.contains(s.charAt(i) + "")) {

                        String corrected_settempvalue = arrivalsettemp.substring(0, arrivalsettemp.length() - 1);
                        et_ArrivalSetTemp.setText(corrected_settempvalue);
                        if (corrected_settempvalue.length() != 0)
                            et_ArrivalSetTemp.setSelection(corrected_settempvalue.length());

                    }
                }
            } catch (Exception d) {
                d.printStackTrace();
            }

2

Jeśli ktoś chce użyć tylko numeru od 0 do 9 z imeOptionswłączeniem, użyj poniższej linii w swoimEditText

android: inputType = "number | none"

Pozwoli to tylko na liczbę, a jeśli klikniesz przycisk Gotowe / Dalej na klawiaturze, fokus przejdzie do następnego pola.


0

Możesz go użyć w formacie XML

<EditText
 android:id="@+id/myNumber"
 android:digits="123"
 android:inputType="number"
/>

lub,

android:inputType="numberPassword" along with editText.setTransformationMethod(null); to remove auto-hiding of the number.

lub,

android:inputType="phone"

Programowo możesz użyć
editText.setInputType (InputType.TYPE_CLASS_NUMBER);


0

Muszę złapać naciśnięcie Enter na klawiaturze z TextWatcherem . Ale dowiedziałem się, że wszystkie klawiatury numeryczne dla Androida: inputType = „number” lub „numberDecimal” lub „numberPassword” itp. Nie pozwalają mi złapać Enter, gdy użytkownik je naciśnie.

Próbowałem android:digits="0123456789\n"i wszystkie klawiatury numeryczne zaczęły współpracować z Enter i TextWatcher.

Więc moja droga to:

android:digits="0123456789\n"
android:inputType="numberPassword"

plus editText.setTransformationMethod(null)

Dzięki barmaley i abhiank.


0

Nie wiem, jaka była prawidłowa odpowiedź w '13, ale dzisiaj brzmi:

myEditText.setKeyListener(DigitsKeyListener.getInstance(null, false, true)); // positive decimal numbers

Dostajesz wszystko, w tym klawiatura ekranowa to klawiatura numeryczna.

Prawie wszystko. Espresso, w swojej nieskończonej mądrości, pozwala w typeText("...")niewytłumaczalny sposób ominąć filtr i dostać się do śmieci ...


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.