gpt4 book ai didi

android - 如何支持中文的斜体和粗体

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:57 25 4
gpt4 key购买 nike

我的 android 应用程序将使用中文。常规字体可以,但是斜体和粗体就不行了。

那么中文斜体和粗体应该使用哪些字体文件呢?

最佳答案

我假设您正在使用 TextView 来显示中文单词。

如果你想让 TextView 中的 whatever 单词为粗体或斜体,这很容易。只需使用

testView.getPaint().setFakeBoldText(true);

将所有单词加粗。

对于斜体,使用:

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

但是,如果你只是想让一些单词变成粗体或者斜体。通常,您可以在 Spannable 的特定范围内设置 StyleSpan,但它不适用于中文单词。

因此,我建议你创建一个类 extends 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);
}
}

将此跨度设置为您的中文单词,我应该可以工作了。请注意检查它是否仅设置在中文单词上。我没有测试过,但我可以想象在粗体英文字符上设置 fakebold 会非常难看。

关于android - 如何支持中文的斜体和粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com