gpt4 book ai didi

android - 使用 TypefaceSpan

转载 作者:行者123 更新时间:2023-11-30 05:09:50 25 4
gpt4 key购买 nike

我正在尝试制作 TypefaceSpan TypefaceSpanon developer.android.com

该页面上提供的使用 new TypefaceSpan(Typeface) 的示例现在似乎是错误的,因为没有这样的构造函数。所以我尝试使用 new TypefaceSpan(Parcel) 但没有成功(我不知道如何正确地将 Typeface 放入 Parcel),并且 new TypefaceSpan(String) 支持只有系统字体(我无法使用自定义字体)。

有谁知道如何将 TypefaceSpan 与自定义字体(来自 res/font)一起使用?

最佳答案

我希望这对你有用。

像这样声明变量:

  Typeface typeface;

像这样初始化变量:

 typeface = Typeface.createFromAsset(getAssets(), "fonts/yourFontName.ttf");

设置成这样的 View :

 yourView.setTypeface(typeface);

以上代码用于设置 View 的字体。

对于 CustomTypeFaceSpan,将以下类添加到您的包中。

public class CustomTypefaceSpan extends TypefaceSpan {

private final Typeface newType;

public CustomTypefaceSpan(String family, Typeface type) {
super(family);
newType = type;
}

@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, newType);
}

@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, newType);
}

private static void applyCustomTypeFace(Paint paint, Typeface tf) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}

int fake = oldStyle & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}

if ((fake & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}

paint.setTypeface(tf);
}
}

像这样使用上面的类:

     Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/YourFontName.ttf");
SpannableString mNewTitle = new SpannableString("Your String Value");
mNewTitle.setSpan(new CustomTypefaceSpan("", typeface), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
yourView.setText(mNewTitle);

关于android - 使用 TypefaceSpan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927088/

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