【发布时间】:2015-10-06 23:10:29
【问题描述】:
我在应用程序中使用了自定义视图组件,该组件通过 Paint/Canvas 在屏幕上绘制一些文本。
我正在使用以下代码(在调用 canvas.drawText() 之前)使我的文本变为斜体:
mPaintText.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));
这适用于三星 Galaxy Nexus。但在 Samsung Epic 4g (galaxy S)、Samsung Epic Touch (Galaxy SII) 和 Samsung Transform ultra 上,我的文字仍然不是斜体。
有谁知道为什么有些三星设备不支持这样设置斜体文本?我知道这些设备能够呈现斜体文本,因为如果我有一个 TextView 我可以使用任何一个
tv.setText(Html.fromHtml("<i>sometext</i>");
在java中或
android:textStyle="italic"
在 layout.xml 中,我的文本显示为斜体。
有谁知道我可以设置画布的 drawText() 方法以绘制可能在这些设备上工作的斜体文本的另一种方法?
编辑:
以下是我在 cmets 中尝试过的一些方法的列表。事实证明,SERIF 似乎是唯一可以使用的字体。
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC) //Nothing
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT_BOLD, Typeface.ITALIC) //Nothing
mPaint.setTypeface(Typeface.create(Typeface.SERIF, Typeface.ITALIC) //omg it is italic...But serifs look gross.
mPaint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC) //Nothing
mPaint.setTypeface(Typeface.create(Typeface.MONOSPACE, Typeface.ITALIC) //Changes font, but still no italic.
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD_ITALIC) //Bold but no italic
再次编辑:为了实现这个功能,我最终将斜体版的 Roboto 字体添加到我的资产文件夹中,并将其作为字体应用。如果有人找到一种方法让它工作而不以这种方式添加它,我仍然会感兴趣。
【问题讨论】:
-
你用什么字体给你这种效果?
-
无论在各自的设备上有什么库存,我都没有更改字体。
-
尝试将直接值传递给
setTypeface方法.. -
仅供参考,我的 Galaxy SII 现已升级到 4.0.3 并且 paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC)) 以斜体显示 OK。