在Android 4.0(冰淇淋三明治)上自定义字体呈现

当在Android 4.0上testing一个使用Helvetica Neue作为主要字体的应用程序时,我发现与多个不同版本的Android相比,在字体呈现方面存在不一致。 我们在2.1,2.2.2,2.3.5,3.2,4.0和4.0.3上进行了testing,每次都有相同的结果。 我们也用不同的字体二进制文件做了这些testing,结果相同。

任何input或解决方法,将不胜感激。

下面是一个示例应用程序的截图,以显示不良结果,第一个是2.3.5,第二个是4.0.3。

2.3.5

4.0.3

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setText("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); textView.setTypeface(Typeface.createFromAsset(getAssets(), "Helvetica Neue.ttf")); textView.setTextSize(9); setContentView(textView); } 

Solutions Collecting From Web of "在Android 4.0(冰淇淋三明治)上自定义字体呈现"

虽然我们从来没有findHelvetica渲染错误的解决scheme,但是在向我们展示Galaxy Nexus上的错误之后,我们能够说服客户切换到Roboto。


更新:

 public class TextViewCompat extends TextView { public TextViewCompat(Context context) { super(context); setup(context, null, 0); } public TextViewCompat(Context context, AttributeSet attrs) { super(context, attrs); setup(context, attrs, 0); } public TextViewCompat(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setup(context, attrs, defStyle); } private void setup(Context context, AttributeSet attrs, int defStyle) { setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); } } 

将字体typesttf文件添加到资产文件夹,然后添加以下代码

Typeface tf = Typeface.createFromAsset(getBaseContext()。getAssets(),“Helvetica.ttf”);

然后将tf对象添加到文本视图,如下所示

 textobjext.setTypeface(tf, Typeface.BOLD); 

玩了一些之后,我还没有能够重现你所看到的。

让我相信你使用的字体是不好的。

我把我所有的字体设置为我的其他答案,这对我来说很好,看屏幕:

所以最上面的文本是Roboto-Normal然后下面的文本是Roboto-Light,使用<b></b>强化它。

所以3个版本,3个不同的屏幕尺寸,两个密度,手动设置字体。 相同的渲染。 不知道你如何得到你所看到的。 你用不同的字体尝试过吗?

我会提供一些更多的例子,如果这可能有帮助吗?

Android 2.2

Android 2.3

Android 4.0.3

ICS v14 +使用这里find的Roboto字体: Androiddevise

如果您希望它在所有版本中显示相同,则手动设置types面将会更好。

 Typeface mBoldType = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Bold.ttf"); TextView mTextView = findById(R.id.text1); mTextView.setTypeface(mBoldType); 

不幸的是,没有快速的方法来在自定义字体的xml中做到这一点,但一个正确编程的助手类应该做你所需要的。

如果你需要一个示例函数让我知道。

需要注意的是,如果你设置了一个自定义字体,像android:fontStyle这样的东西将不起作用,即你需要一个粗体字体,斜体字体等等。