Android webview 图片加载一次后不显示
Android webview images not showing after loading once
在 android 中,我正在将带有本地图像的本地 html 加载到网络视图中。在模拟器上,甚至在我测试过的一台较新的 android 设备上,一切正常——没有问题。但是,我有一个更旧的设备(android 2.3.4)有问题。当我第一次加载 html 文件时,图像显示正常。当我单击 phone 后退按钮,然后导航回页面时,图像消失了。我想弄清楚这是一个常见问题还是旧 phone.
的问题
这是加载文件:
w = (WebView) findViewById(R.id.webview1);
w.getSettings().setJavaScriptEnabled(true);
w.getSettings().setBuiltInZoomControls(false);
w.getSettings().setDefaultTextEncodingName("utf-8");
InputStream is;
try {
is = getAssets().open("Learn/TrigGraphing.html");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
String str = new String(buffer);
w.loadDataWithBaseURL("file:///android_asset/Learn/Images/", str, "text/html", "utf-8", "file:///android_asset/Learn/TrigGraphing.html");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这里是 html:
<img id="img03" class="images" src="file:///android_asset/Learn/Images/UnitCircle10.png"/>
还有一个变化 - 如果图像太大而无法显示在屏幕上,我会调整它们的大小。这主要针对平板电脑。在 html body onload() 函数上,我执行以下 javascript:
function checkImgSize() {
if($(document).width() > $(window).width()) {
windowWidth = $(window).width();
var elements = document.getElementsByClassName("images");
for (var i=0; i<elements.length; i++) {
currentImgWidth = elements[i].width;
currentImgHeight = elements[i].height;
newImgWidth = Math.round(0.85*windowWidth);
newImgHeight = (newImgWidth/currentImgWidth)*currentImgHeight;
elements[i].style.width = newImgWidth;
elements[i].style.height = newImgHeight;
}
}
我查看了这个调整大小功能,但我不明白为什么如果第二次加载它们会使图像消失,但我不确定。有人有什么建议吗?
想了想自己的问题解决了。显然,网页在加载一次后从缓存中加载,出于某种原因,这搞砸了——尽管我仍然不确定为什么。我刚刚在加载 html 之前用 "w.clearCache(true);" 清除了缓存,现在它工作正常。
我使用 css background 属性 而不是 img 标签解决了我的问题。
而不是这个:
<img width="100" height="100" class="images" src="file:///android_asset/Learn/Images/UnitCircle10.png"/>
我用过这个:
<div style="width: 100px; height: 100px; background:url(file:///android_asset/Learn/Images/UnitCircle10.png); background-size:cover; "></div>
在 android 中,我正在将带有本地图像的本地 html 加载到网络视图中。在模拟器上,甚至在我测试过的一台较新的 android 设备上,一切正常——没有问题。但是,我有一个更旧的设备(android 2.3.4)有问题。当我第一次加载 html 文件时,图像显示正常。当我单击 phone 后退按钮,然后导航回页面时,图像消失了。我想弄清楚这是一个常见问题还是旧 phone.
的问题这是加载文件:
w = (WebView) findViewById(R.id.webview1);
w.getSettings().setJavaScriptEnabled(true);
w.getSettings().setBuiltInZoomControls(false);
w.getSettings().setDefaultTextEncodingName("utf-8");
InputStream is;
try {
is = getAssets().open("Learn/TrigGraphing.html");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
String str = new String(buffer);
w.loadDataWithBaseURL("file:///android_asset/Learn/Images/", str, "text/html", "utf-8", "file:///android_asset/Learn/TrigGraphing.html");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这里是 html:
<img id="img03" class="images" src="file:///android_asset/Learn/Images/UnitCircle10.png"/>
还有一个变化 - 如果图像太大而无法显示在屏幕上,我会调整它们的大小。这主要针对平板电脑。在 html body onload() 函数上,我执行以下 javascript:
function checkImgSize() {
if($(document).width() > $(window).width()) {
windowWidth = $(window).width();
var elements = document.getElementsByClassName("images");
for (var i=0; i<elements.length; i++) {
currentImgWidth = elements[i].width;
currentImgHeight = elements[i].height;
newImgWidth = Math.round(0.85*windowWidth);
newImgHeight = (newImgWidth/currentImgWidth)*currentImgHeight;
elements[i].style.width = newImgWidth;
elements[i].style.height = newImgHeight;
}
}
我查看了这个调整大小功能,但我不明白为什么如果第二次加载它们会使图像消失,但我不确定。有人有什么建议吗?
想了想自己的问题解决了。显然,网页在加载一次后从缓存中加载,出于某种原因,这搞砸了——尽管我仍然不确定为什么。我刚刚在加载 html 之前用 "w.clearCache(true);" 清除了缓存,现在它工作正常。
我使用 css background 属性 而不是 img 标签解决了我的问题。
而不是这个:
<img width="100" height="100" class="images" src="file:///android_asset/Learn/Images/UnitCircle10.png"/>
我用过这个:
<div style="width: 100px; height: 100px; background:url(file:///android_asset/Learn/Images/UnitCircle10.png); background-size:cover; "></div>