Android Paint.measureText:部分之和等于整体吗?

Android Paint.measureText:部分之和等于整体吗?,android,string,paint,measure,Android,String,Paint,Measure,如果我有这样一根绳子 String myString = "This is some text."; 如果我测量整个字符串,我会得到与测量每个字符的总和相同的长度吗 起初,我认为答案是肯定的,但后来我读到了,上面说measureText在每次测量前后添加了一个AdvanceX值。如果这是真的,那么它将在测量总长度时添加一个细微的错误(因为每个字符之间都有两个空格) 我还知道,有些字体会根据周围的文字改变相邻字母的排列方式。这让我越来越想,部分的总和将不同于整体 这个图像来自于 这很重要,因为

如果我有这样一根绳子

String myString = "This is some text.";
如果我测量整个字符串,我会得到与测量每个字符的总和相同的长度吗

起初,我认为答案是肯定的,但后来我读到了,上面说
measureText
在每次测量前后添加了一个
AdvanceX
值。如果这是真的,那么它将在测量总长度时添加一个细微的错误(因为每个字符之间都有两个空格)

我还知道,有些字体会根据周围的文字改变相邻字母的排列方式。这让我越来越想,部分的总和将不同于整体

这个图像来自于

这很重要,因为我正在创建自己的自定义文本视图,需要处理换行。如果一个单词对于一行来说太长,那么我会测量每个字符,直到我发现我需要打断的地方。但是,我假设对单个字符宽度的度量求和与对整个字符串的度量相同


我已经设置了这个问题,以便在我完成测试后在下面回答它

整体不总是等于各部分之和

这似乎是紧排的结果,与您提到的AdvanceX双重填充无关

测试代码

以下是测试代码:

String myString = "This is some text.";

Paint myPaint = new Paint();
myPaint.setAntiAlias(true);
myPaint.setTextSize(100);

float theWhole = myPaint.measureText(myString);

float sumOfTheParts = 0;
for (int i = 0; i < myString.length(); i++) {
    sumOfTheParts += myPaint.measureText(myString, i, i + 1);
}
然而,当有字母需要紧排时,措施是不同的。这是使用不同字符串再次进行的测试:

String myString = "AV Wa";

theWhole        // 291.0
sumOfTheParts   // 297.0
含义

您不能假设测量字符串的所有字符,然后求和总数,就可以得到字符串的实际长度。因此,在进行文本换行时,需要测量整个字符串范围

String myString = "AV Wa";

theWhole        // 291.0
sumOfTheParts   // 297.0