0
我在EditText上設置了一個TextWatcher,它在用戶鍵入數字後跟一個空格後更改輸入類型。更改輸入時,鍵盤不接受第一個字符
如果用戶鍵入兩個數字,則輸入類型會切換並接受下一個字符,但如果用戶只鍵入一個數字並按空格鍵,輸入類型仍會更改,但不會接受用戶嘗試輸入的第一個字符。
我已經在Froyo和1.6上測試過它,它只發生在Froyo上,它的工作原理應該是1.6。
下面的代碼:
TextWatcher watcher = new TextWatcher() {
@Override
public void afterTextChanged (Editable s) {
}
@Override
public void beforeTextChanged (CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged (CharSequence s, int start, int before, int count) {
// Parsed text holder is a class that just parses the EditText and pulls out various parts.
ParsedTextHolder th = parseTextHolder(s);
String newText = "";
Boolean setTextKeyListener = false;
String tGetTextString = mQuery.getText().toString();
if (!th.pFullMatch.equals("")) {
if (th.pFullMatch.length() == 2) {
mQuery.setKeyListener(new
TextKeyListener(TextKeyListener.Capitalize.SENTENCES, true));
newText = tGetTextString + " for ";
setTextKeyListener = true;
}
}
if (setTextKeyListener) {
Log.i("setTextKeyListener", "true");
if (mQuery.getKeyListener().getClass() != TextKeyListener.class) {
mQuery.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.SENTENCES, true));
} else {
Log.d("setTextKeyListener", "skipped. already was text.");
}
if (!newText.equals("")) {
int position = newText.length();
String ttext = newText;
newText = "";
mQuery.setText(ttext, TextView.BufferType.EDITABLE);
mQuery.setText(ttext);
Editable text = mQuery.getEditableText();
Log.w("setting selectiont to text: ", text.toString());
Log.w("setting selectiont to position: ", Integer.toString(position));
Selection.setSelection(text, position);
mQuery.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.SENTENCES, true));
}
}
}
};
而且,這裏是一個APK,如果你想看到什麼錯誤是這樣的:http://endlesswhileloop.com/files/KeyboardBug.apk
剛試過使用afterTextChanged,沒有運氣。 感謝您的答案,但我沒有意識到,編輯EditText在onTextChanged是不好的。 – tonyc 2010-09-13 17:14:59
嗯,好吧,你爲什麼最後調用refreshDrawableState?這似乎有點駭人聽聞,可能會導致不同版本的差異..(這只是一個猜測,但當你不得不強迫視圖刷新你實際上只是掩蓋了一個基本問題)。 – 2010-09-13 17:37:34
啊,我有refreshDrawableState只是作爲一個黑客,看看它是否會解決它,我刪除了一堆無關緊要的東西,但仍然沒有運氣。 – tonyc 2010-09-13 20:42:23