真正解决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
  • 66429

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

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

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

Android控制文字水平间距android:letterSpacing 附录文章1实现的是Android的文字在水平方向的缩放,然而不是水平方向的文字间距。如果要想实现Android TextVi...
  • zhangphil
  • zhangphil
  • 2016年05月04日 10:24
  • 9978

Android 中如何调节 TextView 的字间距

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

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

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

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

字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型。查看源代码,默认textView 此属性是使用的是: andro...
  • yangxi_001
  • yangxi_001
  • 2014年07月17日 11:30
  • 2873

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

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

自定义TextView设置字间距

兼容5.0以下public class MyView extends TextView{ private float spacing = Spacing.NORMAL; private...
  • qq_22491765
  • qq_22491765
  • 2017年01月14日 16:19
  • 284

Android设置TextView字间距与行间距

Android的textView有一个属性android:textScaleX是调节textview的X轴的放大缩小的,它的值是一个float型。 查看源代码,默认textView 此属性是使用的是:...
  • maizangxiangwang
  • maizangxiangwang
  • 2016年03月19日 15:04
  • 584

Android设置TextView行间距(非行高)

Android系统中TextView默认显示中文时会比较紧凑,不是很美观。 为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpac...
  • aboutjunjun
  • aboutjunjun
  • 2013年06月04日 15:25
  • 64989
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:真正解决TextView行间距、字间距的问题
举报原因:
原因补充:

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