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.
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).
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With