textView换行的问题

来源:互联网 发布:软件售后服务计划书 编辑:程序博客网 时间:2024/04/29 07:40
import java.util.Arrays;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.text.Layout;import android.text.StaticLayout;import android.text.TextPaint;import android.util.AttributeSet;import android.widget.TextView;/** * @author ccheng * @Date 3/18/14 */public class JustifyTextView extends TextView {    public JustifyTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    protected void onDraw(Canvas canvas) {        TextPaint mPaint = getPaint();        FontMetrics fm = mPaint.getFontMetrics();        float baseline = fm.descent - fm.ascent;        float x = 0;        float y = baseline; // 由于系统基于字体的底部来绘制文本,所有需要加上字体的高度。        String txt = this.getText().toString();        // 文本自动换行        String[] texts = autoSplit(txt, mPaint, getWidth() - 5);        for (String text : texts) {            canvas.drawText(text, x, y, mPaint); // 坐标以控件左上角为原点            y += baseline + fm.leading; // 添加字体行间距        }    }    /**     * 自动分割文本     *      * @param content     *            需要分割的文本     * @param p     *            画笔,用来根据字体测量文本的宽度     * @param width     *            最大的可显示像素(一般为控件的宽度)     * @return 一个字符串数组,保存每行的文本     */    private String[] autoSplit(String content, Paint p, float width) {        int length = content.length();        float textWidth = p.measureText(content);        if (textWidth <= width) {            return new String[] { content };        }        int start = 0, end = 1, i = 0;        int lines = (int) Math.ceil(textWidth / width); // 计算行数        String[] lineTexts = new String[lines];        while (start < length) {            if (p.measureText(content, start, end) > width) { // 文本宽度超出控件宽度时                lineTexts[i++] = (String) content.subSequence(start, end);                start = end;            }            if (end == length) { // 不足一行的文本                lineTexts[i] = (String) content.subSequence(start, end);                break;            }            end += 1;        }        return lineTexts;    }}
0 0
原创粉丝点击