• 【Android】如何改变TextView字体间距


    方法:

    1.自定义字体,在其中添加间距,较复杂

    Typeface myfont = Typeface.createFromAsset(getAssets(),
              "fonts/Blocks2.ttf");
    
    myeditText.setTypeface(myfont);


    2.字母间加空格,不太可取,宽度不灵活
    3.用textScaleX和space,自定义TextView,让textScaleX只改变间距,不改变字体.
    参考链接:

    https://stackoverflow.com/questions/14283246/change-text-kerning-or-spacing-in-textview

    package nl.raakict.android.spc.widget;
    import android.content.Context;
    import android.text.Spannable;
    import android.text.SpannableString;
    import android.text.style.ScaleXSpan;
    import android.util.AttributeSet;
    import android.widget.TextView;
    
    
    public class LetterSpacingTextView extends TextView {
        private float letterSpacing = LetterSpacing.BIGGEST;
        private CharSequence originalText = "";
    
    
        public LetterSpacingTextView(Context context) {
            super(context);
        }
    
        public LetterSpacingTextView(Context context, AttributeSet attrs){
            super(context, attrs);
            originalText = super.getText();
            applyLetterSpacing();
            this.invalidate();
        }
    
        public LetterSpacingTextView(Context context, AttributeSet attrs, int defStyle){
            super(context, attrs, defStyle);
        }
    
        public float getLetterSpacing() {
            return letterSpacing;
        }
    
        public void setLetterSpacing(float letterSpacing) {
            this.letterSpacing = letterSpacing;
            applyLetterSpacing();
        }
    
        @Override
        public void setText(CharSequence text, BufferType type) {
            originalText = text;
            applyLetterSpacing();
        }
    
        @Override
        public CharSequence getText() {
            return originalText;
        }
    
        private void applyLetterSpacing() {
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < originalText.length(); i++) {
                String c = ""+ originalText.charAt(i);
                builder.append(c.toLowerCase());
                if(i+1 < originalText.length()) {
                    builder.append("u00A0");
                }
            }
            SpannableString finalText = new SpannableString(builder.toString());
            if(builder.toString().length() > 1) {
                for(int i = 1; i < builder.toString().length(); i+=2) {
                    finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
            super.setText(finalText, BufferType.SPANNABLE);
        }
    
        public class LetterSpacing {
            public final static float NORMAL = 0;
            public final static float NORMALBIG = (float)0.025;
            public final static float BIG = (float)0.05;
            public final static float BIGGEST = (float)0.2;
        }
    }
    

      4.复写onDraw,每次画一个字符,手动控制每个字符的位置。

  • 相关阅读:
    【Docker】命令 start
    【Docker】命令 create
    【Docker】命令 docker
    【Docker】命令 pull
    【Docker】命令 search
    【Docker】命令 info
    【Docker】命令 version
    Java常用类——Random类
    Java常用类——BigInteger& BigDecimal
    Java常用类——Math类
  • 原文地址:https://www.cnblogs.com/ryq2014/p/6897769.html
Copyright © 2020-2023  润新知