Java Android绘制断开文本新行

Java Android绘制断开文本新行,java,android,newline,paint,Java,Android,Newline,Paint,我使用Paint.breakText()获取行数。但它似乎对“\n”不起作用 text = "a\n"; int lineCount = 0; int index = 0; int length = text.length(); //maxWidthPX is 240 while(index < length - 1) { index += paint.breakText(text, index, length, true, maxWidthPX, null); lineC

我使用
Paint.breakText()
获取行数。但它似乎对“\n”不起作用

text = "a\n";
int lineCount = 0;
int index = 0;
int length = text.length();
//maxWidthPX is 240
while(index < length - 1) {
    index += paint.breakText(text, index, length, true, maxWidthPX, null);
    lineCount++;
}
text=“a\n”;
int lineCount=0;
int指数=0;
int length=text.length();
//maxWidthPX是240
while(索引<长度-1){
index+=paint.breakText(文本、索引、长度、true、maxWidthPX、null);
lineCount++;
}
假设测线计数为2。 但事实证明,lineCount是1。 不是应该是2点吗?原因文本包含新行分隔符:'\n'


根据官方文件,paint.breakText()需要以下参数:

public int breakText(CharSequence text, int start, int end, boolean measureForwards, float maxWidth, float[] measuredWidth) 
因此,它将字符序列从开始位置到结束位置断开,您在其中写道:

paint.breakText(text, index, length, true, maxWidthPX, null);
其中,end=length

这就是为什么,它总是执行一次

我已编辑了您的代码:

text = "a\n";
int lineCount = 0;
int index = 0;
int length = text.length();
//maxWidthPX is 240
while(index <= length - 1) {
    index += paint.breakText(text, index, index + 1, true, maxWidthPX, null);
    lineCount++;
}
text=“a\n”;
int lineCount=0;
int指数=0;
int length=text.length();
//maxWidthPX是240

而(索引根据官方文件paint.breakText()需要以下参数:

public int breakText(CharSequence text, int start, int end, boolean measureForwards, float maxWidth, float[] measuredWidth) 
因此,它将字符序列从开始位置到结束位置断开,您在其中写道:

paint.breakText(text, index, length, true, maxWidthPX, null);
其中,end=length

这就是为什么,它总是执行一次

我已编辑了您的代码:

text = "a\n";
int lineCount = 0;
int index = 0;
int length = text.length();
//maxWidthPX is 240
while(index <= length - 1) {
    index += paint.breakText(text, index, index + 1, true, maxWidthPX, null);
    lineCount++;
}
text=“a\n”;
int lineCount=0;
int指数=0;
int length=text.length();
//maxWidthPX是240

而(index最后,我通过使用stringsplit()找到了一个解决方案

String[]textStr=text.split(\\n”);
int allLineCount=0;
for(字符串textTmp:textStr){
int lineCount=0;
int指数=0;
int length=textTmp.length();
while(索引<长度-1){
index+=paint.breakText(textTmp,index,length,true,maxWidthPX,null);
lineCount++;
}
allLineCount+=lineCount;
}

最后,我通过使用stringsplit()找到了一个解决方案

String[]textStr=text.split(\\n”);
int allLineCount=0;
for(字符串textTmp:textStr){
int lineCount=0;
int指数=0;
int length=textTmp.length();
while(索引<长度-1){
index+=paint.breakText(textTmp,index,length,true,maxWidthPX,null);
lineCount++;
}
allLineCount+=lineCount;
}

您的长度为2。您将循环到长度-1(so 1)以下。您将只进入循环一次,因此会增加行数一次。您的长度为2。您将循环到长度-1(so 1)以下。您将只进入循环一次,因此会增加行数一次。