2011-11-24 8 views

Répondre

1

Je vous suggère de ne pas utiliser gras et italique caractères lors de l'affichage du texte chinois.

Le caractère gras est susceptible de déformer le texte et l'italique faussera artificiellement le texte.

4

Je suppose que vous utilisez TextView pour afficher les mots chinois.

Si vous voulez que les mots de TextView soient en gras ou en italique, ce serait facile. Il suffit d'utiliser

testView.getPaint().setFakeBoldText(true); 

pour faire tous les mots en gras.

Pour italic, utilisez:

testView.getPaint().setTextSkewX(-0.25f); 

Cependant, si vous voulez seulement quelques mots pour être en gras ou en italique. Normalement, vous pouvez définir StyleSpan sur une plage spécifique de votre Spannable mais ce n'est pas un travail sur le mot chinois.

Par conséquent, je vous suggère de créer une classe étend StyleSpan

public class ChineseStyleSpan extends StyleSpan{ 
    public ChineseStyleSpan(int src) { 
     super(src); 

    } 
    public ChineseStyleSpan(Parcel src) { 
     super(src); 
    } 
    @Override 
    public void updateDrawState(TextPaint ds) { 
     newApply(ds, this.getStyle()); 
    } 
    @Override 
    public void updateMeasureState(TextPaint paint) { 
     newApply(paint, this.getStyle()); 
    } 

    private static void newApply(Paint paint, int style){ 
     int oldStyle; 

     Typeface old = paint.getTypeface(); 
     if(old == null)oldStyle =0; 
     else oldStyle = old.getStyle(); 

     int want = oldStyle | style; 
     Typeface tf; 
     if(old == null)tf = Typeface.defaultFromStyle(want); 
     else tf = Typeface.create(old, want); 
     int fake = want & ~tf.getStyle(); 

     if ((want & Typeface.BOLD) != 0)paint.setFakeBoldText(true); 
     if ((want & Typeface.ITALIC) != 0)paint.setTextSkewX(-0.25f); 
     //The only two lines to be changed, the normal StyleSpan will set you paint to use FakeBold when you want Bold Style but the Typeface return say it don't support it. 
     //However, Chinese words in Android are not bold EVEN THOUGH the typeface return it can bold, so the Chinese with StyleSpan(Bold Style) do not bold at all. 
     //This Custom Class therefore set the paint FakeBold no matter typeface return it can support bold or not. 
     //Italic words would be the same 

     paint.setTypeface(tf); 
    } 
} 

Définissez cette période à vos mots chinois et je serais travail. Soyez conscient de vérifier qu'il est uniquement défini sur les mots chinois seulement. Je n'ai pas de test dessus mais je peux imaginer que le jeu fakebold sur des caractères anglais gras serait très moche.

Questions connexes