is there a way to set a custom space (in pixels) between letters to an editText? I found only how to set spaces between the lines, but bot between letters on the same row
Asked
Active
Viewed 1.8k times
8
-
take a look here http://stackoverflow.com/questions/1063268/is-it-possible-to-alter-the-letter-spacing-kerning-of-a-font-with-cocoa-touch – novalagung Nov 25 '13 at 08:25
-
this is not an IOS, objective c question, I need to achieve this on android, as you can see in the question's tags. – Buda Gavril Nov 25 '13 at 08:39
-
sorry, i didn't see that – novalagung Dec 05 '13 at 01:57
4 Answers
12
Using android:letterSpacing
i was able to add spacing between characters in a textview
<android.support.v7.widget.AppCompatTextView
android:id="@+id/textViewValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.35"
android:maxLines="1" />
Related methods:

Rissmon Suresh
- 13,173
- 5
- 29
- 38
2
I had to do this myself today so here are some updates about this problem :
From API 21 you can use XML attribute android:letterSpacing="2"
or from code myEditText.setLetterSpacing(2);
Before API 21, use a TextWatcher with the following code
private static final String LETTER_SPACING = " ";
private EditText myEditText;
private String myPreviousText;
...
// Get the views
myEditText = (EditText) v.findViewById(R.id.edt_code);
myEditText.addTextChangedListener(this);
...
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Nothing here
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Nothing here
}
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
// Only update the EditText when the user modify it -> Otherwise it will be triggered when adding spaces
if (!text.equals(myPreviousText)) {
// Remove spaces
text = text.replace(" ", "");
// Add space between each character
StringBuilder newText = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
if (i == text.length() - 1) {
// Do not add a space after the last character -> Allow user to delete last character
newText.append(Character.toUpperCase(text.charAt(text.length() - 1)));
}
else {
newText.append(Character.toUpperCase(text.charAt(i)) + LETTER_SPACING);
}
}
myPreviousText = newText.toString();
// Update the text with spaces and place the cursor at the end
myEditText.setText(newText);
myEditText.setSelection(newText.length());
}
}

Fr4nz
- 1,616
- 6
- 24
- 33
0
You could implament a custom TextWatcher, and add X spaces every time the user enteres 1.

robisaks
- 193
- 1
- 9
-
pardon my candor, but this solution is horrible, works but is horrible. – ademar111190 Jul 02 '12 at 15:10
-
I agree, it was an off-the-top-of-my-head response, how would you accomplish this? – robisaks Dec 10 '12 at 01:01
0
i have used this, and works for most API levels if not all of them.
KerningViews
Provides a set of views which allows to adjust the spacing between the characters of that view, AKA, Kerning effect.