我有一個表單,用戶可以在EditText字段中輸入一些數據。其中一個EditText小部件用於電子郵件地址。我使用的是TextWatcher以確保文本始終是小寫如下:Android - EditText TextWatcher保持小寫,不能保留插入符號(輸入光標)的位置
txtEmail.addTextChangedListener(new TextWatcher()
{
String prevString = "";
boolean delAction = false;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if (s.length() < prevString.length())
delAction = true;
else
delAction = false;
}
@Override
public void afterTextChanged(Editable s)
{
if (!delAction)
{
String temp = s.toString().toLowerCase();
if (!temp.equals(prevString))
{
prevString = temp;
txtEmail.setText(temp); // Recursive
txtEmail.setSelection(temp.length());
}
}
else
{
prevString = s.toString();
}
}
});
在onTextChanged(...)
我也做一個比較,以確保刪除工作正常。
現在來解決問題。 txtEmail.setText(temp);
導致整個Watcher遞歸運行。通過添加txtEmail.setSelection(temp.length());
並使用if
轉義遞歸循環,我可以控制插入位置到EditText的末尾,但我無法找到一種方法將我的插入符號保留在特定位置。例如,如果我寫了「myema(il missing)@ something.com」,並且想要返回來對每個字母進行修改,那麼在字符串結尾處插入脫字符號。
現在是奇怪的部分。在beforeTextChanged(...)
或onTextChanged(...)
之前插入的插入符的位置在我鍵入內容時,插入符的位置在每種情況下都被適當地改變了,但是,當我們輸入遞歸調用時插入符的位置被報告爲0。當我實際鍵入時,插入符號運動也被註冊,但是因爲在遞歸調用中沒有插入符號的移動,而不是在EditText中「粘貼」文本,所以我沒有找到位置變化。我保持脫字符的位置?我曾經是實際將字符串分文本。將所有內容都寫入插入符號中,使其更改將其與txtEmail.setSelection(temp.length());
一起扔到那裏,然後在其他步驟中添加字符串的其餘部分(尚未嘗試過)。是否有任何其他(更簡單/更高效)的方式可以通過內置工具處理?
在此先感謝!
你爲什麼把它反正結束了? – creativecreatorormaybenot