Android Paint.setTypeface无法实现斜体效果

10

Paint.setTypeface在斜体方面似乎无法正常工作,或者我做错了什么。我可以创建普通、粗体、等宽和衬线文字,但是无法创建斜体文字。它总是看起来很普通(或者在粗斜体的情况下看起来很粗)。

    //This will appear monospace
    paint.setTypeface(Typeface.MONOSPACE);
    canvas.drawText("foo", 10, 10, paint);

    //This will appear serif
    paint.setTypeface(Typeface.SERIF);
    canvas.drawText("foo", 10, 10, paint);

    //This will appear bold
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
    canvas.drawText("foo", 10, 10, paint);

    //This will NOT appear italic <===  PROBLEM
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));
    canvas.drawText("foo", 10, 10, paint);

    // This isn't working either <===  PROBLEM
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC));

现在的问题是:是否已经有针对此问题的已知解决方案? 我的简单目标是使用斜体样式绘制一些单词...

3个回答

14

经历了相同的困难后,我在TextView源代码中找到了解决方案。试试这个:

paint.setTextSkewX(-0.25f);

在使用setTextSkewX方法之前,将TypeFace设置为正常,否则在支持默认字体的ITALIC模式的设备上,文本会被扭曲得比需要的更多。因此,使用以下方式: paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL); paint.setTextSkewX(-0.25f); - Ayaz Alifov

8

我有同样的问题。看起来并不是所有的安卓字体都支持斜体样式。尝试以下方法,对我有效:

paint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC));

仅在使用SERIF字体时运作正常。DEFAULT、MONOSPACE和SANS_SERIF都忽略此样式。

附言:我指的是API 10。


如果您的目标是API 10及以上版本,那么这个问题已经被Google解决了,所以这个解决方案也是可以的。然而,我的一些应用程序仍需要兼容API 4... - A. Masson

1
为了在不支持默认字体的斜体模式的设备上获得斜体模式,我们应该使用setTextSkewX方法。然而,在应用它之前,我们必须确保不支持斜体模式。我们通过创建一个临时的TextView对象并在两种模式(NORMAL和ITALIC)下测量其宽度来实现这一点。如果它们的宽度相同,则意味着不支持ITALIC模式。
请看另一个问题中提出的解决方案:三星设备是否支持setTypeface(Typeface.Italic)?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接