TextView行間距、字間距的問題

1.修改行間距(最簡單)
在xml中設置
(1)lineSpacingMultiplier屬性,意思是行與行之間的距離倍數,相當于word里面的行間距,例如1.5倍行間距

android:lineSpacingMultiplier="1.5"

(2)lineSpacingExtra屬性,直接設定行與行之間的距離,每行相距3dp

android:lineSpacingExtra="3dp"

通過上面的任何一種方法都可以實現行間距的調整。
2.修改字間距(牛逼的來了)
之前網上有人說,通過Android:textScaleX可
以調整,事實是不行的,Scale很明顯是縮放比例,這個屬性是控制字放大縮小用的。要實現調整字間距,只能自定義TextView來實現了,下面附上代碼。

/**
 * 作者: 
 * 自定義可以調節字間距的TextView,使用的時候,要在JAVA代碼中調用settext方法設置文字,調用setSpacing設置
 *  字間距(float類型)
 */
public class ShangshabanChangeTextSpaceView extends TextView {
    private float spacing = Spacing.NORMAL;
    private CharSequence originalText = "";


    public ShangshabanChangeTextSpaceView(Context context) {
        super(context);
    }

    public ShangshabanChangeTextSpaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ShangshabanChangeTextSpaceView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public float getSpacing() {
        return this.spacing;
    }

    public void setSpacing(float spacing) {
        this.spacing = spacing;
        applySpacing();
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        originalText = text;
        applySpacing();
    }

    @Override
    public CharSequence getText() {
        return originalText;
    }

    private void applySpacing() {
        if (this == null || this.originalText == null) return;
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < originalText.length(); i++) {
            builder.append(originalText.charAt(i));
            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((spacing + 1) / 10), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        super.setText(finalText, BufferType.SPANNABLE);
    }

    public class Spacing {
        public final static float NORMAL = 0;
    }
}

OK,把這個自定義TextView放到布局文件中,然后在Java代碼中調用方法就可以了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,250評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,441評論 25 708
  • Text Kit學習(入門和進階): http://www.cocoachina.com/industry/201...
    F麥子閱讀 4,222評論 1 13
  • 日子過得真快,5月份也快說拜拜。從復試結束后便一直在家幫著母親料理家務,之后嬸嬸又不小心骨折,來回兩地的跑來跑去,...
    sorrowlun閱讀 1,004評論 1 0
  • 1 站在我面前的,是26歲的男孩浩,應該是叫男人了,他生活在一個大家庭里面。在跟我的咨詢過程當中,他說的最多的一句...
    彧婠九尾貓閱讀 336評論 0 2