在 Android 中检查 Typeface 对象的族

Re0*_*ess 4 java 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));
Run Code Online (Sandbox Code Playgroud)

我以后希望能够像这样检查家庭

Typeface tf= paint.getTypeface();

if (tf.equals(Typeface.DEFAULT) || tf.equals(Typeface.DEFAULT_BOLD)) {
    //do something
} else if (...) {
    //do something else
} 
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它们不是同一个对象,我也尝试过tf == value但结果相同。字体对象似乎没有公开任何有助于家庭检测的有用信息,是否有解决方法?我只需要检测基本的 Android 字体(SERIF、SANS-SERIF、DEFAULT、MONOSPACE 等)

Com*_*are 5

不轻易。家庭的关键是一个native_instance int,它是包私有的,不直接暴露,正如你在源代码中看到的那样。

有各种令人讨厌的方式来获取这些信息,这些方式可能适用于也可能不适用于所有设备和所有过去/现在/未来版本的 Android。

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