由于Android WebView默认不支持SMIL动画,因此要使动态SVG在Android WebView中正常工作,可以通过添加对WebSettings的设置来实现。
示例代码:
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setSupportZoom(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.evaluateJavascript("javascript:(function() {" +
"var style = document.createElement('style');" +
"style.innerHTML = '@import url(\"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css\");';" +
"document.head.appendChild(style);" +
"})();", null);
}
});
在这个示例中,我们添加了以下设置:
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
这将允许本地SVG文件在WebView内正常工作。此外,我们利用了evaluateJavascript()
函数在WebView加载完毕后执行一段JavaScript代码,以导入外部的CSS动画库。
请注意,这个解决方法可能无法支持所有类型的SMIL动画,因此你应该测试并确保你的动画在WebView中正常工作。