Reputation: 6282
I must be doing something obvious, but I can't figure out what it is. I'm simply trying to insert a character into an Editable:
@Override
public void afterTextChanged(Editable s) {
Log.d(TAG, "inserting space at " + location);
s.insert(location, " ");
Log.d(TAG, "new word: '" + s + "'");
}
But s never changes. The string 's' is long enough, because I print it and it looks good. If I call Editable.clear(), it is cleared, and I can replace multiple characters with Editable.replace(). Ideas?
Upvotes: 13
Views: 3736
Reputation: 119
My situation was, I want to insert a '-' at third place while typing the zip-code. (Eg. 100-0001). No other character not allowed to enter. I set my EditText in xml,
<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"/>
And in my code i add text change listener
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, "-");
}
}
});
By this way i solved my problem... Please suggest me other ways if there another better options available...
Upvotes: 4
Reputation: 1462
To edit an editable with input filters, simply save the current filters, clear them, edit your text, and then restore the filters.
Here is some sample code that worked for me:
@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
}
Upvotes: 14
Reputation: 6282
I found the problem; I set the inputType as "number" and so adding the space silently failed.
Upvotes: 33
Reputation: 505
Try:
Editable s = getLatestEditable();
Log.d(TAG, "inserting space at " + location);
s.insert(location, " ");
Log.d(TAG, "new word: '" + s + "'");
Upvotes: 1