2011-05-25 5 views
10

La Paint.setTypeface ne fonctionne pas en italique ou je fais quelque chose dans le mauvais sens. Je peux créer du texte normal, gras, monospace et sérif, mais je ne peux pas créer de texte en italique. Il semble toujours normal (ou dans le cas de gras-italique, il semble audacieux).Android Paint.setTypeface ne fonctionne pas en italique

//This will appear monospace 
    paint.setTypeface(Typeface.MONOSPACE); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will appear serif 
    paint.setTypeface(Typeface.SERIF); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will appear bold 
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will NOT appear italic <=== PROBLEM 
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC)); 
    canvas.drawText("foo", 10, 10, paint); 

    // This isn't working either <=== PROBLEM 
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC)); 

Alors maintenant la question: existe-t-il une solution de contournement connue pour cela? Mon but simple est de dessiner quelques mots avec italique style ...

Répondre

14

Après avoir rencontré la même difficulté, j'ai trouvé la solution en pêchant dans le code source TextView. Essayez ceci:

paint.setTextSkewX(-0.25f); 
+0

Cela fonctionne pour moi, merci! –

+0

Avant d'utiliser la méthode setTextSkewX, définissez TypeFace sur normal, sinon un texte sera beaucoup plus incliné que nécessaire sur les périphériques prenant en charge le mode ITALIC pour une police par défaut. Donc, utilisez comme ceci: paint.setTypeface (Typeface.create (Typeface.DEFAULT, Typeface.NORMAL); paint.setTextSkewX (-0.25f); –

8

J'ai le même problème. On dirait que toutes les polices de caractères android ne prennent pas en charge le style ITALIQUE. Essayez de suivre, j'ai travaillé pour moi:

paint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC)); 

Fonctionne bien avec SERIF. DEFAULT, MONOSPACE, SANS_SERIF ingnores ce style.

P.S. Je parle d'API 10.

+0

Oui si votre cible est API 10 et au-dessus parce que Google a résolu le problème. Donc, cette solution est bien aussi. Certaines de mes applications doivent encore être compatibles API 4 ... –

1

Afin d'obtenir un mode italique pour les périphériques qui ne prennent pas en charge pour une police par défaut, nous devrions utiliser la méthode setTextSkewX. Cependant, avant de l'appliquer, nous devons être sûrs qu'un mode italique n'est pas supporté. Nous y parvenons en créant un objet TextView temporel et en mesurant sa largeur dans les deux modes (NORMAL et ITALIC). Si leurs largeurs sont identiques, cela signifie qu'un mode ITALIQUE n'est PAS supporté.

S'il vous plaît, jetez un oeil à une solution présentée dans une autre question: Samsung devices supporting setTypeface(Typeface.Italic)?