StaticLayout

StaticLayout实现文本自动换行

在安卓绘制文本的时候,使用Canvas的drawText绘制文本是不会自动换行的,即使一个很长很长的字符串,drawText也只显示一行,超出部分被隐藏在屏幕之外。可以逐个计算每个字符的宽度,通过一定的算法将字符串分割成多个部分,然后分别调用drawText一部分一部分的显示, 但是这种显示效率会很低。

StaticLayout是android中处理文字换行的一个工具类,StaticLayout已经实现了文本绘制换行处理

private Paint mPaint;
private String text = "使用Canvas的drawText绘制文本是不会自动换行的,即使一个很长很长的字符串,drawText也只显示一行,超出部分被隐藏在屏幕之外。可以逐个计算每个字符的宽度,通过一定的算法将字符串分割成多个部分,然后分别调用drawText一部分一部分的显示, 但是这种显示效率会很低";
private int with;
private TextPaint mTextPaint;

    private void init() {
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setColor(Color.RED);
    mPaint.setStrokeWidth(30);
    mPaint.setTextSize(30);
    //-----------
    mTextPaint = new TextPaint(mPaint);
    mTextPaint.setTextSize(30);
}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    StaticLayout staticLayout = new StaticLayout(text, mTextPaint, with, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
    staticLayout.draw(canvas);
    canvas.restore();
}

只贴出来关键代码;

public StaticLayout(CharSequence source,//表示要绘制的文本内容
                TextPaint paint,//TextPaint
                int width,//canvas 宽度
                Layout.Alignment align,//显示样式(正常、居中等)
                float spacingmult,//相对行间距
                float spacingadd,//相对字体大小
                boolean includepad)

public StaticLayout(CharSequence source,
                int bufstart,
                int bufend,
                TextPaint paint,
                int outerwidth,
                Layout.Alignment align,
                float spacingmult,
                float spacingadd,
                boolean includepad)

public StaticLayout(CharSequence source,
                int bufstart,
                int bufend,
                TextPaint paint,
                int outerwidth,
                Layout.Alignment align,
                float spacingmult,
                float spacingadd,
                boolean includepad,
                TextUtils.TruncateAt ellipsize,
                int ellipsizedWidth)

CharSequence source:

你可能感兴趣的:(Android自定义View)