My empirical experiment shows that if I setSpan(o, start, end) from start to end of a string, where end is String.length() - 1, the last character isn't covered.
When I changed end to exactly String.length(), the entire string is covered and... I don't even get an "out-of-bound" exception.
Unfortunately, there is nothing in the documentation regarding this particular issue.
Can you confirm my observation? (or prove me wrong?)