Android中的自定义字体在不同的API中呈现不同的方式

时间:2012-06-08 16:46:29

标签: android api fonts rendering typeface

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

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

然后我在我的活动中指定了我的字体...非常简单的东西:

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

我遇到的问题是在某些使用后期API的设备上(我在Asus Transformer的仿真器中特别注意到它),文本看起来更粗,宽度更均匀,垂直更混乱对准。在最后一部分,我的意思是某些角色垂直放置得比其他角色高一点或低一些,给文字带来一点过山车的感觉。

考虑下面的屏幕截图

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

i45.tinypic.com/142toud.png

看起来非常标准,对吧?

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

i47.tinypic.com/24zhekn.png

首先,文本可能看起来很相似,但您可能会注意到它看起来有点大胆。但是,请查看“快速”中的“c”。您会注意到它比第一次渲染中的“c”更低,并且更高。您还会注意到,如果您查看单词“quick”中字符的底部,它们就不会在底部对齐。

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

有人看过这个,还是有解释?我希望在以后的API中使文本看起来一致。

非常感谢您的时间!

1 个答案:

答案 0 :(得分:58)

好的,所以似乎在两个实例中只应用了以下标志:

Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG

尝试这样做,看看结果是否有所不同(未必改进,但甚至可以注意到):

textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);