检查Android中的Typeface对象的系列
是否有可能检查Typeface对象在Android API 8中使用的族?
我正在这样的Paint对象上创建字体
//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
但是同样的结果。 Typeface对象似乎没有公开任何有助于家庭检测的东西,是否有解决方法? 我只需要检测基本的Android字体(SERIF,SANS-SERIF,DEFAULT,MONOSPACE等)
不容易。 该系列的关键是native_instance
int
,它是包私有的,不会直接暴露,正如您在源代码中看到的那样。
获取该信息有各种令人讨厌的方式,这些方式可能适用于所有设备以及所有过去/现在/将来的Android版本。
也许你可以在Typeface
周围创建自己的包装器对象来跟踪这些信息。
如果查看源代码,您将看到默认的源代码是使用样式DEFAULT
(*)创建的,因此:
Typeface paintTf = paint.getTypeface(); Typeface.SERIF.equals(Typeface.create(paintTf, Typeface.DEFAULT));
可能会做的工作(这里我检查的是家庭是serif)。
注意:(*)对于DEFAULT_BOLD不适用。