真正解决TextView行间距、字间距的问题

原创 2016年08月30日 16:57:42

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代码中调用方法就可以了。

参考文章http://stackoverflow.com/questions/1640659/how-to-adjust-text-kerning-in-android-textview/1644061#1644061


相关文章推荐

android textview设置字体的行距和字间距

字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型。查看源代码,默认textView 此属性是使用的是: andro...
  • ljz2009y
  • ljz2009y
  • 2014年03月25日 18:50
  • 62282

Android 中如何调节 TextView 的字间距

当前版本的 Android 似乎并未提供控制 TextView 的字间距方法。 搜索网上发现大量“教程”声称可以利用 TextView 的 setTextScaleX() 方法设置字间距,但从字面上...

Android Study 之真正解决TextView字间距,那些扯淡的边儿去吧

LZ-Says:从个人的角度来说为什么要写博客,一方面可以拓展知识,通过分享去了解更多的知识;二方面可以通过优质的博文去推广自己。 之前看过很多博文,不得不说,有的博文写的相当棒,LZ自愧不如,...

Android 自定义TextView 实现文本间距

转载请标明出处: http://blog.csdn.net/u011974987/article/details/50845269; Android系统中TextView默认显示中文时会比较紧凑,不...

android字间距实现,textview字间距实现

搜索了一下关于android字间距,文章很多,但是真正能用的很少,刚好今天有这样的需求,参考了一下网上其它人的写法,自己写了一个,顺便开放源代码,供大家参考。 别人写的自定义的textview一般都...

android textView调整字体的间距和行间距

今天,就随便写的textView的内容。 字间距   textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型。查看源代码,默认textVi...

android textview设置字体的行距和字间距

字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型。查看源代码,默认textView 此属性是使用的是: android.inter...
  • fyfcauc
  • fyfcauc
  • 2014年10月15日 17:06
  • 495

android开发之自定义TextView设置字间距以及通过TextView控件属性设置行间距

懒惰,只是为了更好的懒惰!

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android控制文字水平间距android:letterSpacing

Android控制文字水平间距android:letterSpacing 附录文章1实现的是Android的文字在水平方向的缩放,然而不是水平方向的文字间距。如果要想实现Android TextVi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:真正解决TextView行间距、字间距的问题
举报原因:
原因补充:

(最多只允许输入30个字)