Android:在4.4中,Paint.measureText()不向后兼容。任何解决方法?

时间:2013-12-11 15:48:37

标签: android

我的应用程序能够准确测量字符串是至关重要的;我一直在用Paint.measureText()来做这件事。不幸的是,在4.4中,此方法已更改为不再返回精确值,而是返回一个向上舍入的值。是否有人知道我可以使用另一种方法来精确测量文本,或者有任何其他建议吗?

Android来源:

Android 17
  return w*mInvCompatScaling;
Android 18
  return (float) Math.ceil(w*mInvCompatScaling);

2 个答案:

答案 0 :(得分:0)

看起来回归反射是恢复旧功能的唯一方法。查找私有本机方法如下并调用它。

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

虽然它看起来不干净,但这一定对您有用。

答案 1 :(得分:0)

您必须设置:

m.setAccessible(true);

在调用它之前不要获取IllegalAccessException