package com.rincliu.library.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.widget.TextView;
public class RLAutoSplitTextView extends TextView
{
public RLAutoSplitTextView(Context context)
{
super(context);
}
public RLAutoSplitTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public RLAutoSplitTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas)
{
Paint mPaint = getPaint();
//Get font's height & leading:
FontMetrics fm = mPaint.getFontMetrics();
float height = fm.descent - fm.ascent + fm.leading;
float x = 0;
float y = height;
String[] textLines = autoSplit(getText().toString(), mPaint, getWidth());
for (String textLine : textLines)
{
canvas.drawText(textLine, x, y, mPaint);
y += height;
}
}
private String[] autoSplit(String content, Paint paint, float containerWidth)
{
int length = content.length();
float textWidth = paint.measureText(content);
if (textWidth <= containerWidth)
{
return new String[] {content};
}
int lines = (int) Math.ceil(textWidth / containerWidth);
String[] textLines = new String[lines];
int start = 0, end = 1, i = 0;
while (start < length)
{
float currentTextWidth = paint.measureText(content, start, end);
if (currentTextWidth > containerWidth)
{
textLines[i++] = content.substring(start, end);
start = end;
}
if (end == length)
{
textLines[i] = content.substring(start, end);
break;
}
end++;
}
return textLines;
}
}