Устройства Samsung, поддерживающие setTypeface (Typeface.Italic)?

У меня есть приложение, которое использует пользовательский компонент View, который рисует какой-то текст на экране с помощью Paint / Canvas.

Я использую следующий код (до того, как я вызываю canvas.drawText ()), чтобы сделать свой текст курсивом:

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

Это работает на Samsung Galaxy Nexus. Но на Samsung Epic 4g (галактика S), Samsung Epic Touch (Galaxy SII) и Samsung Transform ультра мой текст по-прежнему не является курсивом.

Кто-нибудь знает, почему некоторые из этих устройств samsung не поддерживают установку курсивного текста таким образом? Я знаю, что устройства способны отображать курсивный текст, потому что, если у меня есть TextView, я могу использовать либо

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

В java или

 android:textStyle="italic" 

В layout.xml и мой текст выделен курсивом.

Кто-нибудь знает по-другому, что я могу установить метод canvas drawText () для рисования текста курсивом, который может работать на этих устройствах?

РЕДАКТИРОВАТЬ:

Вот список некоторых способов, которые я пробовал с их результатом в комментариях после. Оказывается, 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 

EDIT AGAIN: Чтобы сделать эту функцию, я в итоге добавил курсивную версию шрифта roboto в свою папку с ресурсами и применил ее как шрифт. Мне все равно будет интересно, если кто-нибудь найдет способ заставить его работать, не добавляя его таким образом.

Solutions Collecting From Web of "Устройства Samsung, поддерживающие setTypeface (Typeface.Italic)?"

Возможно, ваше устройство Samsung не имеет встроенной курсивной версии нужного шрифта. Возможно, вам придется заставить систему создавать шрифт в стиле курсива синтетически. Пытаться:

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

РЕДАКТИРОВАТЬ

Вместо defaultFromStyle попробуйте использовать Typeface.create (Typeface family, int style) ( defaultFromStyle здесь ).

Попробуйте передать прямые значения в setTypeFace api, пока не найдете правильный. Если курсивом будет работать с помощью других методов, может возникнуть некоторая проблема в постоянных определениях в классе TypeFace (в этих сборках).

 mPaintText.setTypeface(Typeface.defaultFromStyle(0)); // then 1, 2, 3 

Это ошибка от Samsung, и лучшим решением является, как сказал FomayGuy, добавить курсивную версию системного шрифта в активы.

Официальный шрифт Roboto Android доступен здесь .

Нам нужно проверить, поддерживает ли шрифт по умолчанию режим ITALIC. Мы делаем это, создавая временный объект TextView и измеряя его ширину в обоих режимах (NORMAL и ITALIC). Если их ширина отличается, то это означает, что поддерживается ИТАЛИЧЕСКИЙ режим. В противном случае шрифт по умолчанию не поддерживает его, и мы должны использовать метод 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); }