android - मैं अपने EditText इनपुट को संख्यात्मक(संभवतः दशमलव और हस्ताक्षरित) इनपुट पर कैसे रोक सकता हूं?




android-edittext (6)

इस लाइन को xml में डालें

 android:inputType="number|numberDecimal"

मैंने Android पढ़ा है: EditText को संख्याओं तक सीमित करना और Android में एक EditText पर नंबर कीबोर्ड कैसे दिखाऊँ? । दुर्भाग्य से, उनमें से कोई भी मेरी जरूरतों को पूरा नहीं करता है।

मैं अपने EditText इनपुट को केवल नंबरों तक सीमित रखना चाहता हूं। हालाँकि, मैं भी हस्ताक्षरित और / या दशमलव इनपुट की अनुमति देना चाहता हूं।

यहां मेरा वर्तमान कोड है (मुझे यह प्रोग्राम करने की आवश्यकता है):

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);

इसके साथ, मेरा EditText merrily संख्यात्मक इनपुट के लिए सभी इनपुट को प्रतिबंधित करता है। दुर्भाग्य से, यह दशमलव बिंदु की तरह कुछ और अनुमति नहीं देता है।

अगर मैं उस लाइन को edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL) बदल देता हूं, तो EditText सभी इनपुट को स्वीकार करता है (जो मुझे नहीं चाहिए ...)।

मैंने झंडे के संयोजन की कोशिश की है (यह देखने के लिए कि क्या यह काम करेगा हताशा में):

edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)

यह या तो काम नहीं किया (EditText ने हमेशा की तरह सभी इनपुट स्वीकार किए)।

फिर मेरे द्वारा इसे कैसे किया जाएगा?


इसे इस्तेमाल करो। ठीक काम करता है

input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));

संपादित करें

कोटलिन संस्करण

fun EditText.onlyNumbers() {
    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
        InputType.TYPE_NUMBER_FLAG_SIGNED
    keyListener = DigitsKeyListener.getInstance("0123456789")
}

मेरा समाधान: `

   public void onTextChanged(CharSequence s, int start, int before, int count) {
   char ch=s.charAt(start + count - 1);
   if (Character.isLetter(ch)) {
       s=s.subSequence(start, count-1);
       edittext.setText(s);
    }

सबसे अच्छा तरीका है कि प्रोग्रामेटिकली अगली विधि का उपयोग कर रहा है:

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

यदि कोई निर्दिष्ट करता है, तो अंक 0 को 9 के माध्यम से 0 अंक स्वीकार करता है, साथ ही अंक (केवल शुरुआत में) और / या दशमलव बिंदु (केवल एक क्षेत्र)।

यह कई के बारे में समस्या को हल करता है। ' EditText में

editText.setKeyListener(DigitsKeyListener.getInstance(true,true)); // decimals and positive/negative numbers. 

editText.setKeyListener(DigitsKeyListener.getInstance(false,true)); // positive decimals numbers. 

editText.setKeyListener(DigitsKeyListener.getInstance(false,false)); // positive integer numbers.

editText.setKeyListener(DigitsKeyListener.getInstance(true,false)); // positive/negative integer numbers.

android:inputType TextView.setRawInputType() का उपयोग करने का प्रयास करें यह android:inputType से मेल खाती है android:inputType विशेषता।


setRawInputType() का उपयोग करने का कोई कारण नहीं है, बस setInputType() उपयोग करें। हालाँकि, आपको OR ऑपरेटर के साथ वर्ग और झंडे को जोड़ना होगा:

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);




android-edittext