2010-11-11 17 views
17

मैं उपयोगकर्ता को एक इनपुट इनपुट में प्रत्येक बार इनपुट इनपुट को बदलने के लिए एक संपादन टेक्स्ट में उपयोगकर्ता इनपुट फोन नंबर बनाना चाहता हूं। यही है, जब उपयोगकर्ता 4 अंकों तक इनपुट करता है, जैसे 7144, संपादन टेक्स्ट "714-4" दिखाता है। मैं संपादन टेक्स्ट को ### - ### - #### प्रारूपित करने के लिए गतिशील रूप से अपडेट करना चाहता हूं जब भी उपयोगकर्ता कोई अंक इनपुट करता है। यह कैसे किया जा सकता है? भी, मैं एक से अधिक संपादन टेक्स्ट प्रबंधित कर रहा हूं।फोन नंबर प्रारूप के साथ एक संपादन टेक्स्ट को मास्क करें फोन नंबर पर नाइन

उत्तर

59

ऐसा करने का सबसे आसान तरीका एंड्रॉइड PhoneNumberFormattingTextWatcher में निर्मित करना है।

तो बुनियादी तौर पर आप कोड में अपने EditText हो और इस तरह अपने पाठ द्रष्टा सेट ...

EditText inputField = (EditText) findViewById(R.id.inputfield); 
inputField.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); 

PhoneNumberFormattingTextWatcher उपयोग के बारे में अच्छा बात यह है कि यह अपने नंबर की प्रविष्टि सही ढंग से अपने स्थान के आधार पर स्वरूपित जाएगा।

+1

आप एक कस्टम मुखौटा चाहते हैं, तो आपको यह उत्तर उपयोगी पा सकते हैं: http://stackoverflow.com/a/34907607/1013929 –

6

ऊपर उत्तर सही है लेकिन यह देश विशिष्ट के साथ काम करता है। अगर कोई ऐसे स्वरूपित फोन नंबर (### - ### - ####) चाहता है। फिर इसका उपयोग करें:

etPhoneNumber.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        int digits = etPhoneNumber.getText().toString().length(); 
        if (digits > 1) 
         lastChar = etPhoneNumber.getText().toString().substring(digits-1); 
       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 
        int digits = etPhoneNumber.getText().toString().length(); 
        Log.d("LENGTH",""+digits); 
        if (!lastChar.equals("-")) { 
         if (digits == 3 || digits == 7) { 
          etPhoneNumber.append("-"); 
         } 
        } 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 
      }); 

अपनी गतिविधि में String lastChar = " " घोषित करें।

अब आप अपने edittext

android:inputType="phone" 

सब है कि की एक्सएमएल में इस लाइन को जोड़ने।

संपादित: आप 10 अंक सीमित करने के लिए अपने edittext लंबाई भी नीचे पंक्ति जोड़ने चाहते हैं:

android:maxLength="12" 

(यह 12 क्योंकि है "-" अंतरिक्ष दो बार ले जाएगा)

+0

इस XXX-XXX के लिए काम करता है -XXXX फोन नंबर स्वरूपण। बस पेस्ट कॉपी करें। –

1

बस जोड़ने फोन नंबर के लिए EditText के लिए निम्न एक स्वरूपित फ़ोन नंबर प्राप्त करने के लिए (### - ### - ####)

Phone.addTextChangedListener(new TextWatcher() { 

     int length_before = 0; 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      length_before = s.length(); 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      if (length_before < s.length()) { 
       if (s.length() == 3 || s.length() == 7) 
        s.append("-"); 
       if (s.length() > 3) { 
        if (Character.isDigit(s.charAt(3))) 
         s.insert(3, "-"); 
       } 
       if (s.length() > 7) { 
        if (Character.isDigit(s.charAt(7))) 
         s.insert(7, "-"); 
       } 
      } 
     } 
    }); 
1

मेरे स्क्रिप्ट, उदाहरण के लिए यहाँसे लिया


<android.support.design.widget.TextInputLayout 
    android:id="@+id/numphone_layout" 
    app:hintTextAppearance="@style/MyHintText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 

    android:layout_marginTop="8dp"> 

    <android.support.design.widget.TextInputEditText 
     android:id="@+id/edit_text_numphone" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/MyEditText" 
     android:digits="+() 1234567890-" 
     android:hint="@string/hint_numphone" 
     android:inputType="phone" 
     android:maxLength="17" 
     android:textSize="14sp" /> 
</android.support.design.widget.TextInputLayout> 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
TextInputEditText phone = (TextInputEditText) findViewById(R.id.edit_text_numphone); 
//Add to mask 
    phone.addTextChangedListener(textWatcher); 
} 


    TextWatcher textWatcher = new TextWatcher() { 
    private boolean mFormatting; // this is a flag which prevents the stack overflow. 
    private int mAfter; 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // nothing to do here.. 
    } 

    //called before the text is changed... 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     //nothing to do here... 
     mAfter = after; // flag to detect backspace.. 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     // Make sure to ignore calls to afterTextChanged caused by the work done below 
     if (!mFormatting) { 
      mFormatting = true; 
      // using US or RU formatting... 
      if(mAfter!=0) // in case back space ain't clicked... 
      { 
       String num =s.toString(); 
       String data = PhoneNumberUtils.formatNumber(num, "RU"); 
       if(data!=null) 
       { 
        s.clear(); 
        s.append(data); 
        Log.i("Number", data);//8 (999) 123-45-67 or +7 999 123-45-67 
       } 

      } 
      mFormatting = false; 
     } 
    } 
}; 
+0

यह एकमात्र सबसे अच्छा समाधान है जो आकर्षण की तरह काम करता है – Chandru

संबंधित मुद्दे