有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android绘制breakText新行

我使用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++;
}

假设测线计数为2。 但事实证明,lineCount是1。 不是应该是2点吗?原因文本包含新行分隔符:'\n'

AndroidStudio debug break


共 (2) 个答案

  1. # 1 楼答案

    根据官方文件油漆。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++;
    }
    

    并且,找到的行数为2

  2. # 2 楼答案

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

            String[] textStr = text.split("\\n");
        int allLineCount = 0;
        for (String textTmp : textStr) {
            int lineCount = 0;
            int index = 0;
            int length = textTmp.length();
    
            while (index < length - 1) {
                index += paint.breakText(textTmp, index, length, true, maxWidthPX, null);
                lineCount++;
            }
            allLineCount += lineCount;
        }