2012-11-24 13 views
4

是否可以檢查Android API 8中的對象正在使用哪個族?檢查Android中的字體對象的家族

我創建的字樣一個噴漆的對象上,像這樣

//Simplified code, the user actually selects the family and style from a list 
Paint paint = new Paint(); 
paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD)); 

我以後會希望能夠檢查家庭像這樣

Typeface tf= paint.getTypeface(); 

if (tf.equals(Typeface.DEFAULT) || tf.equals(Typeface.DEFAULT_BOLD)) { 
    //do something 
} else if (...) { 
    //do something else 
} 

這並不是因爲他們無法正常工作同樣的對象,我也嘗試了tf == value,但結果也是一樣。字體對象似乎沒有公開任何有用的幫助家庭檢測,有沒有解決方法?我只需要檢測基本Android字體(SERIF,SANS-SERIF,DEFAULT,MONOSPACE等)

回答

3

不容易。這個家族的關鍵是native_instanceint,它是封裝私有的,並沒有直接暴露,你可以在the source code中看到。

獲取該信息的方法有很多種,這些信息可能適用於或不適用於所有設備以及Android的所有過去/現在/未來版本。

也許你可以在跟蹤這些信息的Typeface周圍創建自己的包裝器對象。

1

如果你看看源代碼,你會看到默認的是被風格DEFAULT(*)創建的,因此:

Typeface paintTf = paint.getTypeface(); 
Typeface.SERIF.equals(Typeface.create(paintTf, Typeface.DEFAULT)); 

可能做的工作(在這裏我檢查是家族襯線)。

注意:(*)在DEFAULT_BOLD中不正確。