android - बदलन - भिन्न को दशमलव में बदलिए




एंड्रॉइड इनपुट टाइप लेआउट पैरामीटर-ऋणात्मक दशमलव की अनुमति कैसे दें? (6)

आपको अपने लेआउट (* .xml) के संपादन टेक्स्ट टैग में नंबर हस्ताक्षरित करना होगा

 <EditText android:inputType="numberDecimal|numberSigned"></EditText>

सौभाग्य!

मेरे पास एक लेआउट है जिसमें तीन मानचित्र निर्देशांक प्रविष्टि के लिए तीन फ़ील्ड हैं। अब तक सब ठीक है। मैं एंड्रॉइड का उपयोग कर रहा हूं: लेआउट में inputType = "numberDecimal"। क्षेत्र में प्रवेश करते समय उपयोगकर्ता को संख्यात्मक कीपैड मिल जाता है। फिर भी अच्छा।

हालांकि, जब एक नकारात्मक समन्वय में प्रवेश करने की आवश्यकता होती है, तो ऐसा करने का कोई स्पष्ट तरीका नहीं है।

23.2342 ठीक काम करता है। 232.3421 ठीक काम करता है। -11.23423 दर्ज नहीं किया जा सकता है - अग्रणी नकारात्मक चिह्न दर्ज करने का कोई तरीका नहीं है, या यहां तक ​​कि समन्वय को लपेटें ()।

मुझे यकीन है कि मैं इसे सीधे पाठ इनपुट टाइप में बदलने का मार्ग जा सकता हूं, और उसके बाद एक नियमित अभिव्यक्ति का उपयोग करके सत्यापित किया जा सकता है कि वास्तव में एक संख्यात्मक समन्वय है, उपयोगकर्ता को एरर मैसेजिंग को संभालता है, लेकिन मैं चाहता हूं बल्कि उस मार्ग पर मत जाओ।

मैंने गुगल्ड और स्टैकओवर को बिना किसी किस्मत के कुछ घंटों के लिए इस प्रश्न को फहराया है। कोई सुझाव?


कृपया इस कोड का प्रयोग करें

 et.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER);

प्रत्येक अक्ष के लिए पैटर्न और मैचर का उपयोग करके समाप्त हो गया, जिससे वास्तविक टेक्स्ट इनपुट प्रारूप खुल गया।

तीन अक्ष फ़ील्ड, सबमिट बटन पर ट्रिगर्स सबमिट करें। फ़ील्ड मान्य हैं और या तो सम्मिलित होता है, या एक्सिस फ़ील्ड के लिए आवश्यक प्रारूप के बारे में सबमिटकर्ता को त्रुटि संदेश उठाया जाता है। उचित प्रारूप 1-3 अंक है, वैकल्पिक रूप से '-' द्वारा prefaced, वैकल्पिक रूप से '।' के बाद और अतिरिक्त अंक।

इस कोड को आज़माएं:

private View.OnClickListener onSave=new View.OnClickListener(){
    public void onClick(View v){
        Pattern xAxis = Pattern.compile("[-+]?([0-9]*\\.)?[0-9]+");
        Matcher mForX = xAxis.matcher(xaxis.getText().toString());

        Pattern yAxis = Pattern.compile("[-+]?([0-9]*\\.)?[0-9]+");
        Matcher mForY = yAxis.matcher(yaxis.getText().toString());

        Pattern zAxis = Pattern.compile("[-+]?([0-9]*\\.)?[0-9]+");
        Matcher mForZ = zAxis.matcher(zaxis.getText().toString());

        //If Axis X and Axis Y and Axis Z are all valid entries, the proceed.
        if(mForX.find() && mForY.find() && mForZ.find()){
             //handle insert or update statement here
        }else{
             //give error message regarding correct Axis value format
        }
   }

}


मुझे लगता है कि अपना खुद का कस्टम कीलिस्टर बनाना आपकी सबसे अच्छी शर्त हो सकती है। मैंने कुछ ऐसा किया। मैंने इस तरह एक SignedDecimalKeyListener बनाया है:

public class SignedDecimalKeyListener extends NumberKeyListener 
{
    private char[] mAccepted;
    private static SignedDecimalKeyListener sInstance;

    private static final char[] CHARACTERS = new char[] { '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' };

    @Override
    protected char[] getAcceptedChars()
    {
        return mAccepted;
    }

    private SignedDecimalKeyListener()
    {
        mAccepted = CHARACTERS;
    }

    public static SignedDecimalKeyListener getInstance()
    {
        if(sInstance != null) 
            return sInstance;
        sInstance = new SignedDecimalKeyListener();
        return sInstance;
    }

    public int getInputType()
    {
        return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
    {
        CharSequence out = super.filter(source, start, end, dest, dstart, dend);

        if(out != null)
        {
            source = out;
            start = 0;
            end = out.length();
        }

        //Only allow a '-' to be the very first char
        //and don't allow '.' to be the first char
        if(dstart > 0 && source.equals("-") || dstart == 0 && source.equals("."))
        {
            SpannableStringBuilder stripped = null;

            stripped = new SpannableStringBuilder(source, start, end);
            stripped.delete(start, end);

            if(stripped != null)
                return stripped;
        }
        else if(source.equals("."))
        {
            for(int lo = dend-1; lo > 0; lo--)
            {
                char c = dest.charAt(lo);
                if(source.equals(String.valueOf(c)))
                {
                    SpannableStringBuilder stripped = null;

                    stripped = new SpannableStringBuilder(source, start, end);
                    stripped.delete(start, end);

                    if(stripped != null)
                        return stripped;
                }
            }
        }

        if(out != null)
            return out;
        else
            return null;
    }
}

और फिर इस कस्टम कीलिस्टर का उपयोग अपने संपादन के साथ इस तरह करें:

EditText myEditText = (EditText)findViewById(R.id.myedittext);
myEditText.setKeyListener(SignedDecimalKeyListener.getInstance());

यह मेरे लिए काम कर रहा है।

etbox.setInputType (इनपुट टाइप .YPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER);


EditText.setInputType में InputType.TYPE_NUMBER_FLAG_SIGNED सेट करें





layout