Đặt chữ số EditText theo lập trình


86

Về cơ bản, tôi đang cố gắng đặt giá trị chữ số của một EditText theo chương trình. Cho đến nay tôi có:

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

Điều đó cũng tốt, nhưng tôi cũng muốn có thể bao gồm một chữ số thập phân (.). Có ý kiến ​​gì không?


1
Bạn có lẽ sẽ thích sử dụng DialerKeyListenerthay vìDigitsKeyListener
Dmitry Gryazin

Câu trả lời:


206

Thử đi:

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

Từ mã:

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

Tuy nhiên, nó cho phép người dùng bao gồm một số "." Xem câu trả lời của JoeyRA để biết số thực.


Điều đó là tốt, nhưng tôi muốn làm điều này theo chương trình. Lý do cho điều này là vì tôi muốn sử dụng lại một bố cục trong nhiều trường hợp vì các chữ số này là biến duy nhất thay đổi liên tục. Làm điều đó trong mã hiệu quả hơn nhiều trong tình huống của tôi.
ryandlf

2
Cảm ơn. Tôi thực sự cảm thấy câu trả lời này xứng đáng được đánh dấu vì nó dành riêng cho những gì tôi yêu cầu, nhưng cả hai giải pháp đều hoạt động.
ryandlf

@feresr, điều đó thật kỳ lạ, bởi vì nhìn vào TextViewcác nguồn: // 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

Công dụng của .sau số 9 là gì?
Mitesh Shah

1
@MiteshShah nó cho phép vị trí thập phân.
masterwok

30

Thử đi:

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) 

Trả về một DigitsKeyListener chấp nhận các chữ số từ 0 đến 9, cộng với dấu trừ (chỉ ở đầu) và / hoặc dấu thập phân (chỉ một cho mỗi trường) nếu được chỉ định.

Điều này giải quyết vấn đề về nhiều người '.' trong EditText


1
Chỉ cần thêm phần làm rõ: editText.setKeyListener (DigitsKeyListener.getInstance (true, true)); để bật số thập phân và số âm. editText.setKeyListener (DigitsKeyListener.getInstance (false, true)); để chỉ cho phép các số thập phân dương. editText.setKeyListener (DigitsKeyListener.getInstance (sai, sai)); để chỉ cho phép số nguyên dương.
SerSánGal

8
Câu hỏi: nếu bạn setInputTypelặp đi lặp lại, nó sẽ không ghi đè cái thứ hai lên cái đầu tiên? Tôi nghĩ bạn nên sử dụng weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);nhưng tôi không chắc chắn 100%
Rafael Ruiz Muñoz

20

Sử dụng InputType.TYPE_NUMBER_FLAG_DECIMAL.

Cũng xem: Loại đầu vào .


-1? Tôi chắc chắn đã không làm điều đó. Giải pháp của bạn đã hiệu quả, cảm ơn bạn.
ryandlf

Có vẻ như nó đã được hoàn nguyên. Rất vui được giúp đỡ.
Ricky

4

Đối với đầu vào địa chỉ IP (Nhiều dấu chấm và số)

thử

<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
Xin lưu ý rằng địa chỉ IP hệ thập lục phân (với các phần bắt đầu bằng 0x) cũng hợp lệ và có thể sử dụng tên miền thay cho địa chỉ IP.
Triang3l
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.