Au lieu de LineBreakMeasurer
(LBM
) méthode nextLayout(float)
, utilisez la méthode surchargée LBM.nextLayout(float, int, boolean)
. Cela vous permet de limiter le texte que LBM
inclura dans le TextLayout
retourné. Dans votre cas, vous lui ordonnerez de ne pas aller au-delà du prochain saut de ligne.
Cet extrait de code devrait vous donner l'idée. D'abord, utilisez LBM.nextOffset
pour "jeter un coup d'oeil" sur l'index de caractères qui sera la fin de la mise en page suivante. Puis passez en revue votre contenu de chaîne jusqu'à ce décalage pour voir si vous trouvez des caractères de nouvelle ligne. Si vous le faites, utilisez cette limite trouvé que le second argument de nextLayout(float, int, boolean)
qui dira LBM
ne pas dépasser la nouvelle ligne:
int next = lineMeasurer.nextOffset(formatWidth);
int limit = next;
if (limit < totalLength) {
for (int i = lineMeasurer.getPosition(); i < next; ++i) {
char c = string.charAt(i);
if (c == '\n') {
limit = i;
break;
}
}
}
TextLayout layout = lineMeasurer.nextLayout(formatWidth, limit, false);
Références
http://java.sun.com/developer/onlineTraining/Media/2DText/style.html#layout http: //java.sun. com/developer/onlineTraining/Media/2DText/Code/LineBreakSample.java
Ceci est une possibilité, mais je voudrais une solution qui utilise uniquement LineBreakerMeasurer. –