Bonjour tout le monde.

Je vous expose mon petit soucis.

Je crée une image, dans laquelle j'insère un texte. Jusque là, rien de bien compliqué.

La taille du texte s'adapte pour couvrir un maximum de la largeur de l'image.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
        TextPaint fontPaint = new TextPaint();
 
        Typeface plain = Typeface.createFromAsset(this.getActivity().getAssets(), "fonts/01.ttf");
        fontPaint.setTypeface( plain );
 
        fontPaint.setAntiAlias( true );
        fontPaint.setTextSize( 124 );
 
        float x=0;
        float y=0;
 
        StaticLayout sl;
 
        do {
            sl = new StaticLayout(gText, fontPaint, canvas.getWidth()-50, Layout.Alignment.ALIGN_CENTER, 1, 0, false);
 
            x = 25;
            y = canvas.getHeight() - (canvas.getHeight() / 3);
            float deltay = canvas.getHeight() - sl.getHeight();
            y = (deltay + y) / 2;
 
            fontPaint.setTextSize( fontPaint.getTextSize() -1 );
        } while (sl.getHeight() > canvas.getHeight() / 3);
 
        canvas.translate(x, y);
        sl.draw(canvas);
Tant que les mots qui composent le texte ne sont pas trop grands, ça marche très bien. Le texte est écrit, sur plusieurs lignes au besoin.

Seulement, si un mot dépasse un certain nombre de caractères (14 de ce que j'ai cru voir), le mot est lamentablement coupé avant la fin et ça donne ça :

Nom : incommensurable.png
Affichages : 103
Taille : 31,0 Ko

Est-ce que quelqu'un s'est déjà retrouvé confronté à ça, et comment puis-je faire en sorte qu'il ne coupe les phrases qu'aux espaces ?

Merci d'avance pour vos idées qui sont toutes les bienvenues. Je précise que j'ai une contrainte : compatibilité Android API 19.