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.