32

我在我的 android 应用程序中使用自定义 .ttf 字体。我以通常的方式加载它:

myTypeface = Typeface.createFromAsset( getAssets(), "myTypeface.ttf");

然后我在我的活动中分配我的字体......非常简单的东西:

TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setTextSize(12);
tv.setTypeface(App.myTypeface);

我遇到的问题是在某些使用更高版本的 API 的设备上(我在华硕 Transformer 的模拟器中特别注意到它),文本看起来稍微粗一点,宽度不太均匀,垂直对齐更混乱。最后一部分我的意思是一些字符垂直放置比其他字符高或低一些,给文本带来一点过山车的感觉。

考虑下面的屏幕截图

这是在模拟器上呈现的文本,其分辨率和 dpi 与 Transformer 相同,但使用的是 Google API 级别 8。

i45.tinypic.com/142toud.png

看起来很标准,对吧?

现在考虑在具有相同分辨率和 dpi 但使用 Google API 级别 15 的模拟器中呈现的文本:

i47.tinypic.com/24zhekn.png

起初,文本可能看起来很相似,但您可能会注意到它看起来有点粗体。但是,请看“quick”中的“c”。你会注意到它比第一个渲染中的“c”更低,更高。您还会注意到,如果您查看单词“quick”中字符的底部,它们并没有在底部对齐。

这些问题可能看起来很小,但在有大量文字的屏幕上,它开始显得非常不专业。

有人看到这个,或者有解释吗?我想让文本在以后的 API 中看起来统一。

非常感谢您的宝贵时间!

4

1 回答 1

58

好的,所以它似乎在两种情况下都应用了以下标志:

Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG

尝试这样做,看看结果是否有任何不同(不一定有所改善,但甚至根本不明显):

textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
于 2012-06-08T17:41:37.687 回答