2017-01-31 50 views
0

我設置TextWatcherEditText像下面。但是當我嘗試清除文本時,光標將在清除每個字母后開始。EditText - 光標即將開始爲明文時的每個字母

class MyInputWatcher implements TextWatcher { 

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

    } 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     et.removeTextChangedListener(watcher2); 
     et.setText(s.toString().replaceAll("[^[:alpha:]]", "")); 
     et.addTextChangedListener(watcher2); 
    } 
    @Override 
    public void afterTextChanged(Editable s) { 

    } 
} 
+0

裏面使用'afterTextChanged' – W4R10CK

回答

0

像這樣做(修訂版):

class MyInputWatcher implements TextWatcher { 

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

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     String temp = s.toString().replaceAll("[^a-zA-Z]", ""); 
     if (s.toString().length() != temp.length()) { 
      et.setText(temp); 
      et.setSelection(temp.length()); 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 
} 
+0

你的代碼這會給堆棧溢出異常 –

+0

請使用.....它的工作,我測試了它自己 – Ashish

+0

這工作正常,但每當粘貼文本,光標自動移動到最後的位置。在正常的編輯文本中,它不會像這樣移動。 –

0

蘇巴斯·庫馬爾,您可以使用方法:

et.setSelection(position) 

爲有需要的位置

0

每次顯示光標清除一個它調用onTextChanged()方法的字符,作爲您的實現,它將獲得edittext文本並返回設置爲它,所以光標來到文本的開頭。清除et.setText(s.toString().replaceAll("[^[:alpha:]]", ""));,它將被修復。或者使用et.setSelection(et.getText().toString().length+1);

+0

這會將光標移動到文本的末尾。如果我想從中間清除,這將不起作用 –

+0

然後清除此'et.setText(s.toString()。replaceAll(「[^ [:alpha:]]」,「」));' –

0

將位置設置爲像這樣的afterTextChanged()方法上的光標。

class MyInputWatcher implements TextWatcher { 

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

} 
@Override 
public void onTextChanged(CharSequence s, int start, int before, 
     int count) { 
    et.removeTextChangedListener(watcher2); 
    et.setText(s.toString().replaceAll("[^[:alpha:]]", "")); 
    et.addTextChangedListener(watcher2); 
} 
@Override 
public void afterTextChanged(Editable s) { 
    et.setSelection(et.getText().toString().length()) 
} 

}

+0

這將移動光標到文本的結尾。如果我想從中間清除這將不起作用 –

+0

然後,您必須手動計算光標位置。 –

0

請嘗試這樣

editText.setSelection(editText.getText().toString().length()); 
相關問題