EditText Rakamlarını Programlı Olarak Ayarlama


89

Esasen bir EditText öğesinin basamak değerini programlı olarak ayarlamaya çalışıyorum. Şimdiye kadar elimde:

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

Sorun değil, ama aynı zamanda ondalık basamak (.) Da dahil edebilmek istiyorum. Herhangi bir fikir?


1
Bunun DialerKeyListeneryerine muhtemelen kullanmayı tercih DigitsKeyListener
edersiniz

Yanıtlar:


208

Bunu dene:

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

Koddan:

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

Ancak, kullanıcının birkaç "." Eklemesine izin verir. Gerçek sayılar için JoeyRA'nın cevabına bakın .


Sorun değil, ancak bunu programlı olarak yapmak istiyorum. Bunun nedeni, bu rakamlar sürekli değişen tek değişken olduğundan, bir düzeni birden çok durumda yeniden kullanmak istememdir. Kodla yapmak benim durumumda çok daha etkili.
ryandlf

2
Teşekkürler. Aslında bu cevabın onay işaretini hak ettiğini düşünüyorum çünkü istediğim şeye özel, ancak her iki çözüm de işe yarıyor.
ryandlf

@feresr, bu garip, çünkü TextViewkaynaklara baktığımızda : // 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

.9'dan sonra ne işe yarar ?
Mitesh Shah

1
@MiteshShah ondalık basamağa izin verir.
masterwok

30

Bunu dene:

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) 

0 ile 9 arasındaki rakamları, artı eksi işaretini (yalnızca başlangıçta) ve / veya belirtilmişse ondalık noktayı (alan başına yalnızca bir tane) kabul eden bir DigitsKeyListener döndürür.

Bu, birçok '.' İle ilgili sorunu çözer. EditText'te


1
Sadece bir açıklama ekleyin: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); ondalık sayıları ve negatif sayıları etkinleştirmek için. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); yalnızca pozitif ondalık sayıları etkinleştirmek için. editText.setKeyListener (DigitsKeyListener.getInstance (false, false)); yalnızca pozitif tam sayıları etkinleştirmek için.
SerSánGal

8
Soru: setInputTypeBir kez daha yaparsanız , ikincisini birinciye geçersiz kılmayacak mı? Kullanmanız gerektiğini düşünüyorum weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);ama% 100 emin değilim
Rafael Ruiz Muñoz

20

Kullanın InputType.TYPE_NUMBER_FLAG_DECIMAL.

Ayrıca bkz: Giriş Türleri .


-1? Ben kesinlikle yapmadım. Çözümünüz işe yaradı, teşekkürler.
ryandlf

Geri alınmış gibi görünüyor. Yardımcı olduğuma sevindim.
Ricky

4

IP adresi girişi için (Birden çok nokta ve sayı)

Deneyin

<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
Lütfen onaltılık IP adreslerinin (0x ile başlayan kısımlarla) geçerli olduğunu ve IP adresi yerine etki alanı adının kullanılabileceğini unutmayın.
Triang3l

0

Hala uygun bir yol bulan varsa, bunun setRawInputType()olmadığını unutmayınsetInputType()

val digits = "ABCDabcd" // or any characters you want to allow
editText.keyListener = DigitsKeyListener.getInstance(digits) 
editText.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.