ตั้งค่า EditText Digits โดยใช้โปรแกรม


89

ฉันพยายามตั้งค่าหลักของ EditText แบบเป็นโปรแกรม จนถึงตอนนี้ฉันมี:

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

ซึ่งก็ใช้ได้ แต่ฉันก็ต้องการรวมตำแหน่งทศนิยม (.) ด้วย ความคิดใด ๆ ?


1
คุณอาจต้องการใช้DialerKeyListenerแทนDigitsKeyListener
Dmitry Gryazin

คำตอบ:


208

ลองสิ่งนี้:

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

จากรหัส:

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

แต่ผู้ใช้สามารถรวม "." ไว้ได้ ดูคำตอบของJoeyRAสำหรับจำนวนจริง


ไม่เป็นไร แต่ฉันต้องการทำแบบเป็นโปรแกรม เหตุผลนี้เป็นเพราะฉันต้องการใช้เค้าโครงหนึ่งซ้ำในหลาย ๆ สถานการณ์เนื่องจากตัวเลขนี้เป็นตัวแปรเดียวที่เปลี่ยนแปลงตลอดเวลา การทำในโค้ดมีประสิทธิภาพมากกว่าในสถานการณ์ของฉัน
ryandlf

2
ขอบคุณ. ฉันรู้สึกว่าคำตอบนี้สมควรได้รับเครื่องหมายถูกเพราะเป็นสิ่งที่เฉพาะเจาะจงสำหรับสิ่งที่ฉันขอ แต่ทั้งสองวิธีใช้งานได้
ryandlf

@feresr มันแปลกเพราะดูจากTextViewแหล่งข้อมูล: // 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?
Mitesh Shah

1
@MiteshShah อนุญาตให้มีตำแหน่งทศนิยม
masterwok

30

ลองสิ่งนี้:

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) 

ส่งคืน DigitsKeyListener ที่ยอมรับตัวเลข 0 ถึง 9 บวกด้วยเครื่องหมายลบ (เฉพาะที่จุดเริ่มต้น) และ / หรือจุดทศนิยม (เพียงหนึ่งรายการต่อฟิลด์) หากระบุไว้

วิธีนี้จะช่วยแก้ปัญหาเกี่ยวกับ "." ใน EditText


1
เพียงเพิ่มคำชี้แจง: editText.setKeyListener (DigitsKeyListener.getInstance (จริงจริง)); เพื่อเปิดใช้งานทศนิยมและจำนวนลบ editText.setKeyListener (DigitsKeyListener.getInstance (เท็จจริง)); เพื่อเปิดใช้เฉพาะเลขทศนิยมที่เป็นบวกเท่านั้น editText.setKeyListener (DigitsKeyListener.getInstance (เท็จเท็จ)); เพื่อเปิดใช้งานเฉพาะจำนวนเต็มบวก
SerSánGal

8
คำถาม: ถ้าคุณsetInputTypeซ้ำแล้วซ้ำอีกมันจะไม่แทนที่อันที่สองกับอันแรกหรือ? ฉันคิดว่าคุณควรใช้weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);แต่ฉันไม่แน่ใจ 100%
Rafael Ruiz Muñoz

20

ใช้InputType.TYPE_NUMBER_FLAG_DECIMAL.

ยังเห็น: ประเภทการป้อนข้อมูล


-1? ฉันไม่ได้ทำอย่างนั้นแน่นอน วิธีแก้ปัญหาของคุณได้ผลขอบคุณ
ryandlf

ดูเหมือนว่าจะถูกเปลี่ยนกลับแล้ว ดีใจที่ได้ช่วยเหลือ
Ricky

4

สำหรับการป้อนที่อยู่ IP (จุดและตัวเลขหลายจุด)

ลอง

<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
โปรดทราบว่าที่อยู่ IP เลขฐานสิบหก (มีส่วนที่ขึ้นต้นด้วย 0x) ก็ใช้ได้เช่นกันและสามารถใช้ชื่อโดเมนแทนที่อยู่ IP ได้
Triang3l

0

หากใครยังหาวิธีที่เหมาะสมโปรดทราบว่าsetRawInputType()ไม่ใช่setInputType()

val digits = "ABCDabcd" // or any characters you want to allow
editText.keyListener = DigitsKeyListener.getInstance(digits) 
editText.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.