Letter spacing in Android EditText

前端 未结 2 2054
攒了一身酷
攒了一身酷 2021-01-26 19:20

I am trying to Display a text box with letters separated by spaces.

    EditText wordText = (EditText) findViewById(R.id.word_text);
    wordText.setPaintFlags(w         


        
相关标签:
2条回答
  • 2021-01-26 19:41
    1. 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;
          }
      }
      

      }

    2. Attach this textWatcher to your EditText:

       EditText.addTextChangedListener(new CustomTextWatcher());
      
    0 讨论(0)
  • 2021-01-26 19:59

    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:

    1. Create a custom font and add you own spacing there. It is convoluted though, because it involves copyright and not-so-dynamic spacing between letters
    2. Adding spaces in between letters - also not so desirable, because there is not enough granularity when it comes to increases in spacing values
    3. A combination of 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?
    0 讨论(0)
提交回复
热议问题