未看到 SVG 标记图像 Android 网页视图

SVG tag image not seen Android webview

提问人:Talha Büyükakkaşlar 提问时间:3/20/2014 最后编辑:Talha Büyükakkaşlar 更新时间:1/12/2021 访问量:2611

问:

我正在使用 Android 在我的应用程序中显示 XHTML 文件 对于显示图像,我正在使用函数,但是当我尝试使用下面的代码时WebViewshouldInterceptRequest

<svg xmlns="http://www.w3.org/2000/svg" height="100%" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 1478 2544" width="100%" xmlns:xlink="http://www.w3.org/1999/xlink">
  <image width="1478" height="2544" xlink:href="../Images/Antropoloji_Kapak_on_renk.jpg"></image>
</svg>

shouldInterceptRequest未调用方法,无法显示图像

IAM支持所有版本的Android 4+

我无法更改内容。 我应该准确地展示我所给予的

-编辑-

事实证明,当我给出小于屏幕的图像尺寸时,它会显示它

但即使它比屏幕尺寸大,我仍然想展示它

Android SVG 网页视图 XHTML

评论

0赞 ksasq 3/25/2014
您在哪个版本的 android 平台上运行它?
0赞 Talha Büyükakkaşlar 3/25/2014
我在 Android 4.1 上测试过它
0赞 ksasq 3/25/2014
SVG 应该在 4+ 中得到支持,尽管我不确定像这样的子元素的加载是否是通过 shouldInterceptRequest 发送的(我本来以为他们会)。您确定图像存在吗?你能尝试一些其他更基本的SVG元素,看看它们是否被绘制出来吗?
0赞 Talha Büyükakkaşlar 3/25/2014
我确定该图像存在,因为相同的文件适用于我编写的应用程序的 iOS 版本
0赞 ksasq 3/25/2014
这是通过 file:// URL 本地加载还是从远程服务器加载?

答:

0赞 zed13 3/25/2014 #1

我使用以下html页面来显示您的svg:

<html>
<head>
<title>SVG Test</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">

</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" height="100%"
        preserveAspectRatio="xMidYMid meet" version="1.1"
        viewBox="0 0 3288 2188" width="100%"
        xmlns:xlink="http://www.w3.org/1999/xlink">
        <image width="3288" height="2188"
            xlink:href="file:///android_asset/image.jpg"></image>
    </svg>
</body>
</html>

要将嵌入的图像显示到 svg 中,您应该使用带前缀的路径。如果要从其他位置嵌入图像,则使用assets文件夹,则还应使用前缀。file:///android_asset/file:///

评论

0赞 Talha Büyükakkaşlar 3/25/2014
我无法更改内容。我应该准确地展示我所给予的
0赞 zed13 3/25/2014
svg 中的主要错误是您使用相对文件路径而不是绝对路径。只需使用 file:///android_asset/image.jpg 即可。事实上,您需要在 svg 的 href attr 中使用 uri。
0赞 Danil Onyanov 3/27/2014 #2

你的意思是你不能改变服务器的响应吗?

在这种情况下,你可以用必要的和<svg><html><body>

试试这个:

String svgContent = ... // Your code of svg here
String pageContent = "<html><head><meta charset='UTF-8'><meta name='viewport' content='width=device-width'></head><body>" + svgContent + "</body></html>";
webview.loadData(pageContent, "text/html", "utf-8");

评论

0赞 Talha Büyükakkaşlar 3/27/2014
你真的认为它不在HTML页面中吗?