我必须做一些显而易见的事情,但我无法弄清楚它是什么。我只是想把一个角色插入一个可编辑的:
@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()替换多个字符。想法?
答案 0 :(得分:28)
我发现了问题;我将inputType设置为“number”,因此静默添加空间失败。
答案 1 :(得分:11)
要使用输入过滤器编辑可编辑内容,只需保存当前过滤器,清除它们,编辑文本,然后恢复过滤器。
以下是一些适合我的示例代码:
@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
}
答案 2 :(得分:4)
我的情况是,我想在输入邮政编码时在第三位插入“-”。 (例如100-0001)。不允许输入其他字符。我在xml中设置了EditText,
<EditText
android:id="@+id/etPostalCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="number"
android:digits="0,1,2,3,4,5,6,7,8,9,-"
android:singleLine="true"
android:maxLength="8"/>
在我的代码中,我添加了文本更改侦听器
etPostalCode.addTextChangedListener(new 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) {
}
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().contains("-") && s.length() > 3) {
s.insert(3, "-");
}
}
});
通过这种方式我解决了我的问题...如果还有其他更好的选择,请建议我其他方式...
答案 3 :(得分:1)
尝试:
Editable s = getLatestEditable();
Log.d(TAG, "inserting space at " + location);
s.insert(location, " ");
Log.d(TAG, "new word: '" + s + "'");