2011-05-25 74 views
10

Paint.setTypeface不適用於斜體或我正在做錯誤的方式。我可以創建正常,粗體,等寬字體和襯線文字,但是我無法創建斜體文字。它總是看起來很正常(或者在粗斜體的情況下,它看起來很大膽)。Android Paint.setTypeface不適用於斜體

//This will appear monospace 
    paint.setTypeface(Typeface.MONOSPACE); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will appear serif 
    paint.setTypeface(Typeface.SERIF); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will appear bold 
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); 
    canvas.drawText("foo", 10, 10, paint); 

    //This will NOT appear italic <=== PROBLEM 
    paint.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC)); 
    canvas.drawText("foo", 10, 10, paint); 

    // This isn't working either <=== PROBLEM 
    paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC)); 

所以現在的問題:是否有一個已知的解決方法呢?我的簡單目標是用斜體風格畫一些詞...

回答

14

遇到同樣的困難後,我通過在TextView源代碼中釣魚找到了解決方案。試試這個:

paint.setTextSkewX(-0.25f); 
+0

這適用於我,謝謝! – 2013-05-22 07:08:18

+0

在使用setTextSkewX方法之前,請將TypeFace設置爲normal,否則文本將比默認字體支持ITALIC模式的設備傾斜得多。因此,使用像這樣: paint.setTypeface(Typeface.create(Typeface.DEFAULT,Typeface.NORMAL); paint.setTextSkewX(-0.25f); – 2015-10-06 12:32:34

8

我有同樣的問題。看起來不像所有的android字體都支持ITALIC風格。嘗試以下,我沒有爲我工作:

paint.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC)); 

工作正常與SERIF。默認,MONOSPACE,SANS_SERIF ingnores這種風格。

P.S.我正在談論API 10.

+0

是,如果你的目標是API 10以上,因爲谷歌修復了這個問題。所以這個解決方案也很好。 Howerver我的一些應用程序仍然必須是API 4兼容... – 2014-03-22 14:45:28

1

爲了得到斜體模式的設備不支持它的默認字體,我們應該使用setTextSkewX方法。但是,在應用之前,我們必須確保不支持斜體模式。我們通過創建時態TextView對象並在兩種模式(NORMAL和ITALIC)下測量其寬度來實現它。如果它們的寬度相同,則意味着不支持ITALIC模式。

請看看在另一個問題提出瞭解決方案:Samsung devices supporting setTypeface(Typeface.Italic)?