2013-04-13 44 views
2

我需要用戶根據本specfic模式在一個EditText輸入文字:格式的Android的EditText以特定模式

123.456-7890-123.456

用戶可以輸入任意數量的整數,這樣他們就可以以及輸入123.456-7

我不希望用戶輸入。或者 - 只是數字,就像輸入掩碼一樣。

此外,數字鍵盤應該只顯示。

我已經廣泛地搜索了StackOverflow,並且看到了使用InputFilter,ChangedListener,TextWatcher但沒有發現任何類似於我正在嘗試做的事情的示例。我已經嘗試了我所發現的各種實現,但我在使用這些技術方面經驗不足,因此我可能忽略了某些內容。

任何建議將受到歡迎。

+0

是電話號碼的輸入嗎? –

回答

0

您可以創建自己的類,它實現InputFilter。然後,你可以按如下方式應用它:

MyInputFilter filter = new MyInputFilter(...); 
editText.setFilters(new InputFilter[]{filter}); 

參考文檔的輸入過濾器是如何打算工作,那麼請參考源代碼中的一些使用Android的一些想法如何實現它們的InputFilters的。

0

經過許多失敗的嘗試,以實現輸入過濾或正則表達式,我選擇了一些更直截了當:

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    String a = ""; 
    String str = id.getText().toString(); 
    String replaced = str.replaceAll(Pattern.quote("."),""); 
    replaced = replaced.replaceAll(Pattern.quote("-"),""); 
       char[] id_char = replaced.toCharArray(); 
       int id_len = replaced.length(); 
    for(int i = 0; i < id_len; i++) { 
        if(i == 2 || i == 12) { 
         a += id_char[i] + ".";      
        } 
        else if (i == 5 || i == 9) { 
         a += id_char[i] + "-"; 
        } 
        else a += id_char[i]; 
       } 
    id.removeTextChangedListener(this); 
    id.setText(a); 
    if(before > 0) id.setSelection(start); 
    else id.setSelection(a.length()); 
    id.addTextChangedListener(this);     

}

我不知道這是不是最好的方法,但它確實工作。我仍然沒有解決的一個問題是如何在用戶刪除或插入數字後處理光標放置。如果用戶在EditText的某處插入光標並輸入一個新數字,則光標跳轉到EditText的末尾。我希望光標保持在它所在的位置。另一個問題是,如果用戶在EditText編號和退格鍵中插入光標以刪除編號,則第一個鍵輸入不起作用,第二個鍵輸入編號。我只能猜測這與焦點有關嗎?

-3

使用這個:https://github.com/alobov/SimpleMaskWatcher

只需爲此觀察者設置遮罩(###。### - #### - ###。###)。它會自動添加特殊符號,並且不會檢查輸入字符串是否完整。 但顯示數字鍵盤,您必須使用android:inputType="number"標籤處理您的EditText