我在我的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。
看起来非常标准,对吧?
现在考虑在具有相同分辨率和dpi的模拟器中呈现的文本,但使用Google API等级15:
首先,文本可能看起来很相似,但您可能会注意到它看起来有点大胆。但是,请查看“快速”中的“c”。您会注意到它比第一次渲染中的“c”更低,并且更高。您还会注意到,如果您查看单词“quick”中字符的底部,它们就不会在底部对齐。
这些问题可能看起来很小,但在有大量文字的屏幕上,它看起来真的很不专业。
有人看过这个,还是有解释?我希望在以后的API中使文本看起来一致。
非常感谢您的时间!
答案 0 :(得分:58)
好的,所以似乎在两个实例中只应用了以下标志:
Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG
尝试这样做,看看结果是否有所不同(未必改进,但甚至可以注意到):
textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);