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));

所以现在的问题是:是否有已知的解决方法?我的简单目标是用斜体画一些单词......

4

3 回答 3

14

TextView在遇到同样的困难后,我在源码中摸索找到了解决方案。试试这个:

paint.setTextSkewX(-0.25f);
于 2012-06-05T16:05:38.133 回答
8

我也有同样的问题。看起来并非所有的 android 字体都支持 ITALIC 样式。尝试以下,我对我有用:

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

仅与 SERIF 配合使用即可。DEFAULT、MONOSPACE、SANS_SERIF 忽略这种风格。

PS我说的是API 10。

于 2012-05-12T10:54:48.560 回答
1

为了在不支持默认字体的设备上获得斜体模式,我们应该使用 setTextSkewX 方法。但是,在应用它之前,我们必须确保不支持斜体模式。我们通过创建一个临时 TextView 对象并在两种模式(NORMAL 和 ITALIC)下测量其宽度来实现它。如果它们的宽度相同,则表示不支持斜体模式。

请看一下另一个问题中提出的解决方案:支持 setTypeface(Typeface.Italic) 的三星设备?

于 2015-10-06T15:20:15.317 回答