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());
}
}
4条答案
按热度按时间c9qzyr3d1#
使用
android:letterSpacing
,我能够在textview中添加字符间距相关方法:
setLetterSpacing(float)
pkwftd7m2#
我今天不得不自己做这件事,所以这里有一些关于这个问题的更新:
在API 21中,您可以使用XML属性
android:letterSpacing="2"
或代码myEditText.setLetterSpacing(2);
在API 21之前,使用TextWatcher和以下代码
xghobddn3#
您可以植入一个自定义的TextWatcher,并在用户每次输入1时添加X个空格。
mmvthczy4#
我已经使用了这个,并且适用于大多数API级别,如果不是全部的话。
KerningViews
提供一组视图,允许调整该视图的字符之间的间距,即字距调整效果。
https://github.com/aritraroy/KerningViews