I am trying to Display a text box with letters separated by spaces.
EditText wordText = (EditText) findViewById(R.id.word_text);
wordText.setPaintFlags(w
Make TextWatcher (this example for enter only digits into EditText field, you can change it if necessary)
public class CustomTextWatcher implements TextWatcher{
private static final char space = ' ';
public CodeTextWatcher (){}
@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) {
// Remove all spacing char
int pos = 0;
while (true) {
if (pos >= s.length()) break;
if (space == s.charAt(pos) && (((pos + 1) % 2) != 0 || pos + 1 == s.length())) {
s.delete(pos, pos + 1);
} else {
pos++;
}
}
// Insert char where needed.
pos = 1;
while (true) {
if (pos >= s.length()) break;
final char c = s.charAt(pos);
// Only if its a digit where there should be a space we insert a space
if ("0123456789".indexOf(c) >= 0) {
s.insert(pos, "" + space);
}
pos += 2;
}
}
}
Attach this textWatcher to your EditText:
EditText.addTextChangedListener(new CustomTextWatcher());
The subject of letter spacing seems to have caused quite some traffic over the years. Some preach for using textScaleX
property, but that by itself is not an acceptable solution, because it skews the letters as well. Several other solutions that were mentioned are:
textScaleX
and adding spaces between letters - it involves a custom view where textScaleX
is applied only to the spaces - so the letters remain unchanged, only the space increases-decreases. You can use the non breakable space unicode character as well. For this solution you can check out
Change text kerning or spacing in TextView?