itext文本域自动换行_Android TextView自动换行文字排版参差不齐的原因

本文介绍了如何通过Java创建自定义的CYTextView类,该类继承自TextView,并实现了文本自动换行功能。通过调整字体大小、行间距、宽度等属性,确保文字排版整齐。代码中设置了不同类型的字体样式,并在onDraw方法中处理了换行逻辑,以避免文字排版参差不齐的问题。
摘要由CSDN通过智能技术生成

Java代码

public class CYTextView extends TextView {

public static int m_iTextHeight; //文本的高度

public static int m_iTextWidth;//文本的宽度

private Paint mPaint = null;

private String string="";

private float LineSpace = 0;//行间距

public CYTextView(Context context, AttributeSet set)

{

super(context,set);

TypedArray typedArray = context.obtainStyledAttributes(set, R.styleable.CYTextView);

int width = typedArray.getInt(R.styleable. CY TextView_textwidth, 320);

float textsize = typedArray.getDimension(R.styleable. CY TextView_textSize, 24);

int textcolor = typedArray.getColor(R.styleable. CY TextView_textColor, -1442840576);

float linespace = typedArray.getDimension(R.styleable. CY TextView_lineSpacingExtra, 15);

int typeface = typedArray.getColor(R.styleable. CY TextView_typeface, 0);

typedArray.recycle();

//设置 CY TextView的宽度和行间距

m_iTextWidth=width;

LineSpace=linespace;

// 构建paint对象

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setColor(textcolor);

mPaint.setTextSize(textsize);

switch(typeface){

case 0:

mPaint.setTypeface(Typeface.DEFAULT);

break;

case 1:

mPaint.setTypeface(Typeface.SANS_SERIF);

break;

case 2:

mPaint.setTypeface(Typeface.SERIF);

break;

case 3:

mPaint.setTypeface(Typeface.MONOSPACE);

break;

default:

mPaint.setTypeface(Typeface.DEFAULT);

break;

}

}

@Override

protected void onDraw(Canvas canvas)

{

super.onDraw(canvas);

char ch;

int w = 0;

int istart = 0;

int m_iFontHeight;

int m_iRealLine=0;

int x=2;

int y=30;

Vector m_String=new Vector();

FontMetrics fm = mPaint.getFontMetrics();

m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + (int)LineSpace;//计算字体高度(字体高度+行间距)

for (int i = 0; i < string.length(); i++)

{

ch = string.charAt(i);

float[] widths = new float[1];

String srt = String.valueOf(ch);

mPaint.getTextWidths(srt, widths);

if (ch == '/n'){

m_iRealLine++;

m_String.addElement(string.substring(istart, i));

istart = i + 1;

w = 0;

}else{

w += (int) (Math.ceil(widths[0]));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值