无法插入可编辑

时间:2011-02-07 18:21:55

标签: android textwatcher

我必须做一些显而易见的事情,但我无法弄清楚它是什么。我只是想把一个角色插入一个可编辑的:

@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()替换多个字符。想法?

4 个答案:

答案 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 + "'");