Код Аарона не всегда работает правильно, поэтому вот немного подправленного кода, который работает для меня:
int next = measurer.nextOffset(width);
int limit = next;
if (limit <= text.length()) {
for (int i = measurer.getPosition(); i < next; ++i) {
char c = text.charAt(i);
if (c == '\n') {
limit = i + 1;
break;
}
}
}
TextLayout textLayout = measurer.nextLayout(width, limit, false);
Если вам нужен текст из AttributedString, вы можете просто сделать это заранее
AttributedCharacterIterator iterator = attributedString.getIterator();
StringBuilder stringBuilder = new StringBuilder(iterator.getEndIndex());
while (iterator.getIndex() < iterator.getEndIndex()) {
stringBuilder.append(iterator.current());
iterator.next();
}
String text = stringBuilder.toString();