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.
Ne fonctionne pas? Comment ça ne marche pas? –