Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在4.4中,Paint.measureText()不向后兼容。有解决办法吗?_Android - Fatal编程技术网

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您是否解决了上述问题?