2015-04-05 77 views

回答

0

我的猜測是檢查字符在TextWatcher如下:

EditText editText = (EditText)findViewById(R.id.editText); 
editText.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 
     // Get cursor position 
     int cursorPosition = editText.getSelectionStart(); 

     // Check if the previous character is "," and move your cursor 
     if (s.charAt(cursorPosition - 1) == ',') 
      editText.setSelection(cursorPosition - 2); 
     } 

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

}); 
+0

嗨謝謝你回答@Guillaume LEFEVRE我檢查並告訴喲你怎麼了! – 2015-04-05 21:37:41

+0

唯一的問題是,如果用戶正在鍵入並按下「,」,那麼他們可能會繼續向後跳。這可以通過偵聽KeyEvent.KEYCODE_BACK幷包含一個布爾開關來檢查用戶是否正在刪除。 – PPartisan 2015-04-05 21:38:06

+0

它沒有工作! 「,」不斷刪除!並且在減去getselectionstart之前的某些情況下變爲-1! – 2015-04-05 21:44:42

0

東西像這樣應該可以工作:

全局變量:

private String lastText  = ""; 
private int  countOfCommas= 0; 
private EditText editText; 

代碼:

editText = ((EditText) findViewById(R.id.editText)); 
updateText("Amir,Mahdy"); 

editText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     int new_countOfCommas = s.toString().length() - s.toString().replace(",", "").length(); 
     if(new_countOfCommas < countOfCommas) { 
      int cursor_pos = editText.getSelectionStart(); 
      editText.setText(lastText); 
      if(cursor_pos <= lastText.length()) { 
       editText.setSelection(cursor_pos); 
      } 
     } else { 
      countOfCommas = s.toString().length() - s.toString().replace(",", "").length(); 
      lastText = s.toString(); 
     } 
    } 
}); 

功能以編程方式設置文本:

void updateText(String str) { 
    countOfCommas = str.length() - str.replace(",", "").length(); 
    lastText = str; 
    editText.setText(str); 
} 
+0

嗨@ByteHamster,謝謝你的回答:)在這段代碼中有兩個錯誤,第一個是我不能再添加「,」我自己了,第二個是,它似乎不能在批處理文本輸入上工作,因爲例如:「Amir」作爲複製或添加編程的文本!實際上我想在芯片視圖(MultiAutoCompleteTextView)中使用它,並且不能將建議的字符串添加到我的編輯文本中,那麼修復是什麼? – 2015-04-05 22:09:13

+0

好的,我更新了我的答案。你介意再試一次嗎? :) – ByteHamster 2015-04-05 22:25:27

0

嗨,我面臨着同樣的問題,防止用戶刪除特殊字符,在我的情況十進制字符。這是我如何做到的。 在strings.xml補充一點:

<item type="id" name="SEPARATOR" />

EditTextaddTextChangedListener和方法beforeTextChanged補充一點:

int position = editText.getText().toString().indexOf(your_special_character); 
editTrxt.setTag(R.id.SEPARATOR, position); 

afterTextChanged只返回後面那個字是這樣的:

String text = editText.getText().toString(); 
try { 
    if (!text.contains(your_special_character +"")){ 
    int position = (int)editText.getTag(R.id.SEPARATOR); 
    text = new StringBuilder(text).insert(position, separator).toString(); 
    } 
}catch (Exception ignored){ 
}