Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Samsung devices supporting setTypeface(Typeface.Italic)?

I have in application that makes use of a custom View component that drawas some text onto the screen via Paint/Canvas.

I am using the following code (before I call canvas.drawText()) to make my text Italic:

mPaintText.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));

This works on Samsung Galaxy Nexus. But on Samsung Epic 4g (galaxy S), Samsung Epic Touch (Galaxy SII), and Samsung Transform ultra my text is still non-italic.

Does anyone know why some of these samsung devices wouldn't support setting italic text that way? I know the devices are capable of rendering the italic text because if I have a TextView I can use either

tv.setText(Html.fromHtml("<i>sometext</i>");

in java or

android:textStyle="italic"

in layout.xml and my text appears italic.

Does anyone know of another way that I can set the drawText() method of canvas to draw the text italicized that might work on these devices?

EDIT:

Here is a list of some ways I've tried it with their outcome in comments after. Turns out SERIF seems to be the only font that it works on.

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

EDIT AGAIN: To make this function I ended up adding the italic version of the roboto font to my assets folder and applied it as a font. I'd still be interested if anyone ever finds a way to get it working without adding it this way.

like image 256
FoamyGuy Avatar asked May 02 '12 19:05

FoamyGuy


2 Answers

It may be that your Samsung device does not have a native italics version of the desired font installed. You may have to force the system to create the italics-style font synthetically. Try:

tv.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC), Typeface.ITALIC);

EDIT

Instead of defaultFromStyle, try to use Typeface.create (Typeface family, int style) (documented here).

like image 150
Tony the Pony Avatar answered Oct 18 '22 18:10

Tony the Pony


Try passing direct values to the setTypeFace api till you find the right one. If italicizing is working through other methods then there could be some problem in constant definitions in TypeFace class (in those builds).

mPaintText.setTypeface(Typeface.defaultFromStyle(0)); // then 1, 2, 3
like image 33
Ronnie Avatar answered Oct 18 '22 19:10

Ronnie