set spaces between letters in textview

柔情痞子 提交于 2019-12-06 04:48:45

问题


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


回答1:


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());
    }
}



回答2:


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:

setLetterSpacing(float)




回答3:


You could implament a custom TextWatcher, and add X spaces every time the user enteres 1.




回答4:


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.

https://github.com/aritraroy/KerningViews



来源:https://stackoverflow.com/questions/9516571/set-spaces-between-letters-in-textview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!