我即将发布对我的应用程序的更新,以使用新的 JavaScript Google Charts API,并注意到针对Google Image Charts API的弃用警告。我遇到了轴标签的 JavaScript 问题,显然取决于 Android WebKit 的版本。我知道使用 Google Charts API在 3.1 之前根本无法工作,因为 Webkit 客户端缺乏 SVG 支持。
背景
该应用程序目前支持 Eclair(API 级别 7)向上,SVG 支持仅到达 Honeycomb MR1(API 级别 12)中内置的 WebKit 客户端。为了解决功能上的这种差异,我的代码使用了一个简单的 if-else 语句来检查 Android 版本,然后再决定使用哪个图表 API。
渲染问题
这最好用图片来展示。请注意;
- 在 Android Honeycomb Emulator 上运行与在 Jelly Bean 设备上相同的 JavaScript。
- 比较是在模拟器(不工作)和真实手机(工作)之间
- JavaScript 正在利用内置的 WebView 中运行
android.webkit.WebViewClient
- 模拟器上的轴在
[Object object]
真实设备上显示为但正确
图 1 - 在 Honeycomb 仿真器上发现不正确的轴标签。
图 2 - 在真实设备上找到的正确轴标签。
编码
在没有“粘贴轰炸”的情况下,大量无关代码的问题将在下面描述驱动垂直 (v) 轴命名的 JS 和 Java 位;
JavaScript
...
As part of the chart options...
...
// Vertical axis.
vAxis: {title: yAxisTitle.toString(),
baselineColor: 'white',
titleTextStyle: {color: 'gray'},
textStyle: {color: 'gray'},
gridlines: {color: 'gray'}
}
yAxisTitle
像这样通过Android注入的地方WebView.addJavascriptInterface
;
爪哇
chart.addJavascriptInterface(String.format(getString(string.height_label), getUnits().getSymbol()), "yAxisTitle");
迄今为止的调查
从之前的简要[Object object]
描述中(我是 JS 世界的新手),我了解到我只是在 JavaScript 对象上执行一个 toString,这就是它的样子。但这是否意味着 Android 3.1 和 4.1 之间的 Java-JavaScript 注入发生了变化,这意味着通过addJavascriptInterface注入的数据类型现在被“记住”了,而以前没有?我应该将字符串序列化为 JSON 对象,还是对于传递(几乎)原始类型的内容来说太过分了?最后,我是否应该在 JS 端显式强制转换以强制用于诸如轴标签之类的项目的对象类型确实是字符串?想法赞赏。