我在应用程序中使用了一个自定义视图组件,该组件通过画布/画布将一些文本拖到屏幕上。
我使用以下代码(在调用canvas.drawText()之前)使我的文本为意大利语:
mPaintText.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));这适用于三星Galaxy。但在三星Epic 4g (galaxy S)、三星Epic Touch (Galaxy )和三星Transform on上仍然是非斜体。
有人知道为什么三星的一些设备不支持以这种方式设置斜体文本吗?我知道这些设备能够呈现斜体文本,因为如果我有一个TextView,我可以使用
tv.setText(Html.fromHtml("<i>sometext</i>");在爪哇或
android:textStyle="italic"在layout.xml中,我的文本显示为斜体。
有没有人知道另一种方法,我可以设置画布的drawText()方法来绘制可能在这些设备上工作的斜体文本?
编辑:
下面列出了我尝试过的一些方法,并在之后的评论中给出了结果。原来,衬线似乎是唯一的字体,它的工作。
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字体的斜体版本添加到了“资产”文件夹中,并将其作为字体应用。我仍然感兴趣的是,如果有人想办法使它工作,而不添加这种方式。
发布于 2012-05-12 09:31:07
尝试将直接值传递给setTypeFace api,直到找到正确的值为止。如果斜体化是通过其他方法进行的,那么TypeFace类中的常量定义(在这些构建中)可能会出现一些问题。
mPaintText.setTypeface(Typeface.defaultFromStyle(0)); // then 1, 2, 3发布于 2013-02-19 20:14:17
这是三星的一个bug,最好的解决方案是,正如FomayGuy所说,在资产中添加系统字体的斜体。
官方的Roboto字体是可用的这里。
发布于 2015-10-06 11:39:33
我们需要检查默认字体是否支持斜体模式。我们通过创建一个时态TextView对象并在两种模式(正常和斜体)中测量其宽度来实现。如果它们的宽度不同,则表示支持斜体模式。否则,默认字体不支持它,我们必须使用setTextSkewX()方法来倾斜文本。
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC));
// check whether a font supports an italic mode, returns false if it does't
if (!supportItalicMode(this, Typeface.DEFAULT))
{
paint.setTextSkewX(-0.25f);
}
private boolean supportItalicMode(Context context, Typeface typeFace)
{
Typeface tfNormal = Typeface.create(typeFace, Typeface.NORMAL);
Typeface tfItalic = Typeface.create(typeFace, Typeface.ITALIC);
TextView textView = new TextView(context);
textView.setText("Some sample text to check whether a font supports an italic mode");
textView.setTypeface(tfNormal);
textView.measure(0, 0);
int normalFontStyleSize = textView.getMeasuredWidth();
textView.setTypeface(tfItalic);
textView.measure(0, 0);
int italicFontStyleSize = textView.getMeasuredWidth();
return (normalFontStyleSize != italicFontStyleSize);
}https://stackoverflow.com/questions/10420077
复制相似问题