2011-09-20 128 views
1

我需要控制按下按鈕,然後才能進入我的EditText小部件。它應該像過濾器一樣工作。例如:我需要該用戶只能用數字1,2,3,4,5填充EditText,其他符號必須被忽略。所以應該禁用虛擬鍵盤上的按鈕部分,或者我需要抓住最後按下的符號,分析它並禁用EditText。如何捕捉用虛擬鍵盤按下的鍵並在Android中禁用EditText?

誰知道如何解決這個問題?

謝謝..

回答

0
statusEdt.addTextChangedListener(new TextWatcher(){ 
     public void afterTextChanged(Editable s) {} 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      //do stuff 
      charTxt.setText(statusEdt.getText().length() + "/140"); 
     } 
    }); 

我用這個TextChangedListener(TextWatcher)保持的多少個字符計數已經輸入到一個EditText的Twitter客戶端我做了。你可以使用這樣的監聽器。你會想覆蓋beforeTextChanged或onTextChanged。這些方法將傳遞給你任何CharSequence輸入。你可以檢查輸入的內容,如果輸入無效,你可以通過調用setText()來移除它,並且傳入迄今輸入的內容減去無效字符。

+0

是的,我知道.addTextChangedListener(TextWatcher)方法,而我使用它在我的應用程序。在我問這裏一個問題之前,我嘗試使用3個事件(afterTextChanged,beforeTextChanged,onTextChanged)和簡單的檢查方法來爲每個人設置s =「asdf」,但是這個文本沒有出現在我的EditText中。因此,我無法更改輸入的值。此外,我真的試圖做一個過濾器,當我這樣鍵入符號是錯誤的,只是從EditText刪除最後添加的符號。但是這個動作將EditText光標移動到第一個位置。 – Dimon

+0

這是錯誤的方式來檢查最後添加的符號,導致用戶可以移動光標,並在任何地方鍵入新的符號。這意味着我需要爲整個字符串「掃描」錯誤的符號......這是困難的方式,我可以這樣做,但我覺得這是錯誤的方式。我認爲必須有更美麗和更短的方式來做到這一點...那爲什麼我在這裏 – Dimon

0

你可能需要的是一個InputFilter。 例如只允許數字,符號和小數點:

editText.setFilters(DigistKeyListener.getInstance(true, true)); 
+0

你知道,你告訴我正確的方式來搜索我的問題的答案。我發現了一個詳細的描述在這裏http://stackoverflow.com/questions/3349121/how-do-i-use-inputfilter-to-limit-characters-in-an-edittext-in-android – Dimon

+0

DigitsKeyListener.getInstance()可以工作,如果你只允許數字。 –