Setel EditText Digit secara terprogram


89

Saya pada dasarnya mencoba untuk mengatur nilai digit dari EditText secara terprogram. Sejauh ini saya memiliki:

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

Tidak masalah, tetapi saya juga ingin memasukkan tempat desimal (.). Ada ide?


1
Anda mungkin lebih suka menggunakan DialerKeyListenerdaripadaDigitsKeyListener
Dmitry Gryazin

Jawaban:


208

Coba ini:

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

Dari Kode:

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

Tapi, ini memungkinkan pengguna untuk memasukkan beberapa "." Lihat jawaban JoeyRA untuk bilangan real.


Tidak apa-apa, tapi saya ingin melakukan ini secara terprogram. Alasan untuk ini adalah karena saya ingin menggunakan kembali satu tata letak dalam banyak situasi karena angka ini adalah satu-satunya variabel yang berubah terus-menerus. Melakukannya dalam kode jauh lebih efektif dalam situasi saya.
ryandlf

2
Terima kasih. Saya sebenarnya merasa jawaban ini layak mendapat tanda centang karena khusus untuk apa yang saya minta, tetapi kedua solusi tersebut berfungsi.
ryandlf

@feresr, itu aneh, karena melihat TextViewsumber: // 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

Apa gunanya .setelah jam 9?
Mitesh Shah

1
@IteshShah memungkinkan tempat desimal.
masterwok

30

Coba ini:

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) 

Mengembalikan DigitsKeyListener yang menerima angka 0 sampai 9, ditambah tanda minus (hanya di awal) dan / atau titik desimal (hanya satu per bidang) jika ditentukan.

Ini memecahkan masalah tentang banyak '.' di EditText


1
Cukup tambahkan klarifikasi: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); untuk mengaktifkan desimal dan angka negatif. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); untuk mengaktifkan hanya angka desimal positif. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); untuk mengaktifkan hanya bilangan bulat positif.
SerSánGal

8
Pertanyaan: Jika Anda setInputTypesekali dan lagi, bukankah itu akan menimpa yang kedua ke yang pertama? Saya pikir Anda harus menggunakan weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);tetapi saya tidak 100% yakin
Rafael Ruiz Muñoz

20

Gunakan InputType.TYPE_NUMBER_FLAG_DECIMAL.

Lihat juga: Jenis Input .


-1? Saya pasti tidak melakukan itu. Solusi Anda berhasil, terima kasih.
ryandlf

Sepertinya itu telah dikembalikan. Senang untuk membantu.
Ricky

4

Untuk masukan alamat IP (Beberapa titik dan angka)

mencoba

<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
Harap dicatat bahwa alamat IP heksadesimal (dengan bagian yang dimulai dengan 0x) juga valid, dan nama domain dapat digunakan sebagai pengganti alamat IP.
Triang3l

0

jika ada yang masih menemukan cara yang tepat, perhatikan bahwa setRawInputType()tidaksetInputType()

val digits = "ABCDabcd" // or any characters you want to allow
editText.keyListener = DigitsKeyListener.getInstance(digits) 
editText.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.