drawText(String text, float x, float y, Paint paint)
x,y是基于文字基本线的,而不是android坐标系的左上角。
使用staticLayout进行文字换行,它既可以为文字设置宽度上限来让文字自动换行,也会在 \n
处主动换行
例子:
String text1 = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."; StaticLayout staticLayout1 = new StaticLayout(text1, paint, 600, Layout.Alignment.ALIGN_NORMAL, 1, 0, true); String text2 = "a\nbc\ndefghi\njklm\nnopqrst\nuvwx\nyz"; StaticLayout staticLayout2 = new StaticLayout(text2, paint, 600, Layout.Alignment.ALIGN_NORMAL, 1, 0, true); ... canvas.save(); canvas.translate(50, 100); staticLayout1.draw(canvas); canvas.translate(0, 200); staticLayout2.draw(canvas); canvas.restore();
效果:
StaticLayout
的构造方法是 StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad),其中参数里:
width
是文字区域的宽度,文字到达这个宽度后就会自动换行; align
是文字的对齐方向; spacingmult
是行间距的倍数,通常情况下填 1 就好; spacingadd
是行间距的额外增加值,通常情况下填 0 就好; includeadd
是指是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界。
如果你需要进行多行文字的绘制,并且对文字的排列和样式没有太复杂的花式要求,那么使用 StaticLayout
就好。
Paint对文字绘制的辅助
setTypeface(Typeface typeface) 设置字体样式
setFakeBoldText(boolean fakeBoldText) 设置伪粗体
setStrikeThruText(boolean strikeThruText) 是否加删除线
setUnderlineText(boolean underlineText) 是否加下划线
setTextSkewX(float skewX) 字体倾斜对应的角度
setLetterSpacing(float letterSpacing) 设置字符间距,默认是0
setTextAlign(Paint.Align align) 设置文字对齐方式,左对齐,右对齐,中间对齐等
setTextLocale(Locale locale) 设置字体的语言区域,繁体中文,简体中文等