Android:在4.4中,Paint.measureText()不向后兼容。有解决办法吗?
对于我的应用程序来说,能够准确测量字符串是至关重要的;我一直在使用Android:在4.4中,Paint.measureText()不向后兼容。有解决办法吗?,android,Android,对于我的应用程序来说,能够准确测量字符串是至关重要的;我一直在使用Paint.measureText()来完成此操作。不幸的是,在4.4中,此方法被更改为不再返回精确值,而是返回一个向上舍入的值。有没有人知道我可以使用另一种方法来精确测量文本,或者有其他建议 Android来源: Android 17 return w*mInvCompatScaling; Android 18 return (float) Math.ceil(w*mInvCompatScaling); 看起来回归到反
Paint.measureText()
来完成此操作。不幸的是,在4.4中,此方法被更改为不再返回精确值,而是返回一个向上舍入的值。有没有人知道我可以使用另一种方法来精确测量文本,或者有其他建议
Android来源:
Android 17
return w*mInvCompatScaling;
Android 18
return (float) Math.ceil(w*mInvCompatScaling);
看起来回归到反射是恢复旧功能的唯一途径。按如下所示查找私有本机方法并调用它
Paint paint = new Paint();
// configure paint here
Method m = paint.getClass().getDeclaredMethod("native_measureText",
String.class, int.class);
float size = m.invoke(paint, text, 0x2);
// text - text to measure
// 0x2 - default for Right-To-Left text
虽然它看起来不太干净,但这必须对您有效。您必须设置:
m.setAccessible(true);
在调用它以不获取
IllegalAccessException
之前,您可能可以使用reflection来访问mInvCompatScaling和native_measureText.Yikes,这对于其他地方的问题来说是一个相当大的改变:。您是否尝试过像njzk2建议的那样通过反射调用native_measureText
?出于好奇,文本长度的亚像素测量用例是什么?也许对于您的更大的用例还有其他解决方案。我尝试了反射,但是我得到了一个错误。有人知道下面的抛出NoSuchMethodException的原因吗方法m=MyPaint.class.getDeclaredMethod(“本机_measureText”,新类[]{String.class,Integer.class})@ab11您是否解决了上述问题?