2011-02-07 83 views
9

我必須做一些明顯的事情,但我無法弄清楚它是什麼。我只是試圖插入一個字符到一個可編輯:無法插入到可編輯

@Override 
public void afterTextChanged(Editable s) { 
    Log.d(TAG, "inserting space at " + location); 
    s.insert(location, " "); 
    Log.d(TAG, "new word: '" + s + "'"); 
} 

但s永遠不會改變。字符串'''夠長,因爲我打印它,它看起來不錯。如果我調用Editable.clear(),它將被清除,並且我可以用Editable.replace()替換多個字符。想法?

回答

25

我發現這個問題;我將inputType設置爲「number」,因此靜靜地添加空間失敗。

+0

有什麼辦法可以添加一個空格到inputType爲「number」的EditText? –

+0

是的,請參閱下面的答案;它涉及到暫時清除輸入過濾器。 – BeccaP

+1

您可以使用'android:inputType =「phone」'來代替'number'。它顯示數字,但旁邊有小寫字母。我會說普通用戶不會意識到差異。 – Syex

1

嘗試:

Editable s = getLatestEditable(); 
Log.d(TAG, "inserting space at " + location); 
s.insert(location, " "); 
Log.d(TAG, "new word: '" + s + "'"); 
+0

對不起沒有,getEditable()是我自己的方法。其實這是從TextWatcher.afterTextChanged回調(可編輯) –

9

要使用輸入過濾器編輯可編輯內容,只需保存當前過濾器,清除它們,編輯文本,然後恢復過濾器。

這裏是爲我工作的一些示例代碼:

@Override 
public void afterTextChanged(Editable s) { 
    InputFilter[] filters = s.getFilters(); // save filters 
    s.setFilters(new InputFilter[] {});  // clear filters 
    s.insert(location, " ");    // edit text 
    s.setFilters(filters);     // restore filters 
} 
+0

這對我有用!比哈克接受的答案要好得多。 – CrashproofCode