首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自定义TypefaceSpan类更改字体大小

如何使用自定义TypefaceSpan类更改字体大小
EN

Stack Overflow用户
提问于 2013-12-31 15:46:49
回答 2查看 2.2K关注 0票数 2

我从这篇文章中引用了twaddington的建议:

How to Set a Custom Font in the ActionBar Title?

它在工作,但我需要改变字体大小。我该怎么做?我尝试修改参数int maxSize从

代码语言:javascript
复制
private static LruCache<String, Typeface> sTypefaceCache =
new LruCache<String, Typeface>(12);

是从TypefaceSpan类还是在onCreate方法中完成的?

TypefaceSpan

代码语言:javascript
复制
public class TypefaceSpan extends MetricAffectingSpan {
/** An <code>LruCache</code> for previously loaded typefaces. */
private static LruCache<String, Typeface> sTypefaceCache =
new LruCache<String, Typeface>(12);

private Typeface mTypeface;

/**
* Load the {@link Typeface} and apply to a {@link Spannable}.
*/
public TypefaceSpan(Context context, String typefaceName) {
mTypeface = sTypefaceCache.get(typefaceName);

if (mTypeface == null) {
mTypeface = Typeface.createFromAsset(context.getApplicationContext()
.getAssets(), String.format("fonts/%s", typefaceName));

// Cache the loaded Typeface
sTypefaceCache.put(typefaceName, mTypeface);
}
}

@Override
public void updateMeasureState(TextPaint p) {
p.setTypeface(mTypeface);
// Note: This flag is required for proper typeface rendering
p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}

@Override
public void updateDrawState(TextPaint tp) {
tp.setTypeface(mTypeface);
// Note: This flag is required for proper typeface rendering
tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
}

MainActivity onCreate

代码语言:javascript
复制
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SpannableString s = new SpannableString("TEST TITLE");
    s.setSpan(new TypefaceSpan(this, "MotorwerkOblique.ttf"), 0, s.length(),
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    ActionBar actionBar = getActionBar();
    actionBar.setTitle(s);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-31 16:35:26

将其添加到画图中,每次更新时都会应用一个新的油漆,它应该指定textSize。想象一下字体更像是一种字体/字符集。Android文档指出:

字体类指定字体的字体和内部样式。这是在油漆中使用的,还有textSize、textSkewX、textScaleX等可选的画图设置,用于指定在绘制(和测量)时文本是如何显示的。

在阅读了这篇文章之后,我建议做以下几点。(不确定这是否能做你想做的事。但请告诉我)

代码语言:javascript
复制
@Override
public void updateMeasureState(TextPaint p) {
    p.setTypeface(mTypeface);
    // Note: This flag is required for proper typeface rendering
    p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    p.setTextSize(25);//or what ever size you want
}

@Override
public void updateDrawState(TextPaint tp) {
    tp.setTypeface(mTypeface);
    // Note: This flag is required for proper typeface rendering
    tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    tp.setTextSize(25);//or what ever size you want
}
票数 4
EN

Stack Overflow用户

发布于 2013-12-31 17:30:13

如果您不想自己进行文本呈现,并且只想集中精力使用该实用工具,那么文本呈现器就可以识别三种跨类型的文本。

RelativeSizeSpan这个跨度需要一个绝对值乘以当前文本范围的大小。这主要用于强调。因此,正值将通过因子增加大小,而负值将使大小减小一个因子。

TextAppearanceSpan这个跨度允许您取消引用一个命名的样式,这样您就可以执行类似于使用这个文本范围的R.style.TextAppearance.ExtraAwesomseText之类的操作。在这种风格中,有如下内容:

代码语言:javascript
复制
<style name="TextAppearance.ExtraAwesomeText">
      <item name="android:textSize">18sp</item>
</style>

代码语言:javascript
复制
<style name="TextAppearance.ExtraAwesomeText">
      <item name="android:textSize">18sp</item>
      <item name="android:textColor">#005500</item>
      <item name="android:textStyle">bold</item>
</style>

这取决于你有多具体。但是这个Span允许您更新文本范围,而不必知道当前文本范围的所有细节,因为它设置了绝对值。这也是一个有点干净,因为你不需要弄乱太多的代码,因为你想要更新一种类型的文本在你的整个应用程序。这样的跨度将在样式更改后自动应用。

RasterizerSpan

这一个就像做任何你想要更新外观跨度的事情。它只提供用于文本范围的TextPaint,您只需在跨度的其余部分更改它。所以你可以做一些事情,比如斜体,粗体,加文本阴影等等。这很酷。结合活动中的一些方法,您可以根据您的设计有多复杂来为应用程序定义一些标记扩展。但是,很多时候,您可以只使用它进行内联更改,例如:

代码语言:javascript
复制
charSequence.setSpan(new RasterizerSpan() {

     public void updateDrawState(TextPaint textPaint) {
            // add a text shadow to the given range
            textPaint.setShadowLayer(5, 5, 5 0x005500);
     }
 }, 0, charSequence.length() - 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

我通常坚持使用RasterizerSpan,因为它几乎是蛮力的,而且对于定义自定义模板或非常奇怪的一次性事件来说也是如此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20859695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档