12

我必须做一些明显的事情,但我无法弄清楚它是什么。我只是想将一个字符插入一个可编辑的:

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

但s永远不会改变。字符串 's' 足够长,因为我打印它并且看起来不错。如果我调用 Editable.clear(),它会被清除,我可以用 Editable.replace() 替换多个字符。想法?

4

4 回答 4

30

我发现了问题;我将 inputType 设置为“数字”,因此默默地添加空间失败了。

于 2011-02-07T19:29:23.053 回答
14

要使用输入过滤器编辑可编辑项,只需保存当前过滤器,清除它们,编辑文本,然后恢复过滤器。

这是一些对我有用的示例代码:

@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
}
于 2015-11-13T02:19:40.590 回答
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, "-");
            }
        }
    });

通过这种方式,我解决了我的问题...如果有其他更好的选择,请建议我其他方式...

于 2018-09-26T10:03:29.253 回答
1

尝试:

Editable s = getLatestEditable();
Log.d(TAG, "inserting space at " + location);
s.insert(location, " ");
Log.d(TAG, "new word: '" + s + "'");
于 2011-02-07T18:26:54.023 回答