4

是否可以检查字体对象在 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 等)

4

3 回答 3

5

不轻易。该系列的关键是 a native_instance int,它是包私有的,不直接公开,正如您在源代码中看到的那样。

获取该信息的方法有很多种,它们可能适用于所有设备以及所有过去/现在/未来版本的 Android,也可能不适用。

Typeface也许您可以围绕跟踪此信息创建自己的包装器对象。

于 2012-11-24T15:27:25.430 回答
1

如果您查看源代码,您会看到默认的源代码是使用样式DEFAULT(*) 创建的,因此:

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

可能会完成这项工作(在这里我检查的是家庭是衬线)。

注意: (*) 不适用于 DEFAULT_BOLD。

于 2012-11-24T15:27:33.260 回答
0

我建议您使用 Resources 中的字体,以便您可以通过 equals() 简单地比较字体

例子:

Typeface toCompare = ResourcesCompat.getFont(context, R.font.my_font);
assert tf.equals(toCompare)
于 2021-06-03T21:02:19.830 回答