Android Paint.setTypeface不适用于斜体

时间:2011-05-25 12:28:37

标签: android paint typeface italic

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 个答案:

答案 0 :(得分:14)

遇到同样的困难之后,我在TextView源代码中找到了解决办法。试试这个:

paint.setTextSkewX(-0.25f);

答案 1 :(得分:8)

我有同样的问题。看起来并非所有的android字体都支持ITALIC风格。试试下面,我为我工作:

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

使用SERIF工作正常。 DEFAULT,MONOSPACE,SANS_SERIF进入了这种风格。

P.S。我在谈论API 10。

答案 2 :(得分:1)

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

请查看另一个问题中提出的解决方案:Samsung devices supporting setTypeface(Typeface.Italic)?