【问题标题】:Android Custom font Spannable Typeface SpanAndroid 自定义字体 Spannable Typeface Span
【发布时间】:2011-04-01 22:14:51
【问题描述】:

我在整个应用程序中都使用 Helvetica 字体。目前我正在与资产分开创建字体。所以我说了这三个

HelveticaNeue = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeue.ttf");
HelveticaNeueBold = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBold.ttf");
HelveticaNeueBoldItalic = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBoldItalic.ttf");

当我为一个 TextView 使用一种字体时,一切都很好。但是,我需要使用 spannable

Spannable WordtoSpan = new SpannableString("This text should be normal, but this needs to be bold, and normal");    
WordtoSpan.setSpan(new TypefaceSpan("bold"), 5, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

我想让字符串的一部分是 HeleveticaNeueBold,而有些只是 HelveticaNeue。我认为需要向 Android 表明上面的 3 种字体实际上是相关的,以便它可以很好地切换它们。也在寻找其他方法。

【问题讨论】:

  • 你找到这个问题的答案了吗?请分享解决方案。我还想为一个 TextView 使用两种 Helvetica 的字体)))谢谢。
  • 不需要自定义字体。这是答案Click here

标签: android textview typeface custom-font


【解决方案1】:

您将要编写自定义 TypefaceSpan。好消息是它们并不困难。示例见here。

【讨论】:

    【解决方案2】:

    您可以执行以下操作:

    SpannableString spannableString = new SpannableString("your text");
    Typeface typeface = Typeface.create(ResourcesCompat.getFont(this, R.font.your_font);
    spannableString.setSpan(
        new TypefaceSpan(typeface, Typeface.NORMAL)), 
        0, 4, 
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    

    这个构造函数将替换之前的文本样式,实现你想要的。然而,问题在于它是在 API 28 中引入的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 2015-12-29
      • 2011-08-07
      相关资源
      最近更新 更多