hai*_*rok 18 android android-widget android-webview
我的应用程序使用WebView透明背景,其中元素的一些样式属性由JavaScript修改.
问题:WebView根据修改后的属性不刷新.何时WebView重绘(例如,由于用户方向改变),WebView正确更新.我在Android 3.2(在Samsung GT上)上重现了这个问题,但在Android 2.1和4.3上都可以正常工作.
重现问题的示例代码:
显然,当第一个图像被点击时,它应该消失,点击第二个图像应该移动它.如果将背景颜色WebView更改为不透明,或者如果我删除下面显示的图像,则WebView所有工作正常...
Web视图加载的HTML.:
<!DOCTYPE html>
<html>
<body >
<img style="position:absolute;left:0px" onclick="this.style.display='none';"
src="http://flv.justad.tv/gallery/assets/trickplay/justad/tp-pause.png" />
<img style="position:absolute;left:200px" onclick="this.style.top='200px';"
src="http://flv.justad.tv/gallery/assets/trickplay/justad/tp-ff.png" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/display_background" />
<RelativeLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/WebviewContainer">
</RelativeLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
申请Activity:
public class TestImageMoveActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
RelativeLayout webviewContainer =
(RelativeLayout)findViewById(R.id.WebviewContainer);
WebView web = new WebView(this);
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
web.setLayoutParams(
new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
web.setBackgroundColor(Color.TRANSPARENT);
webviewContainer.addView(web);
web.loadUrl("http://192.168.1.12/myWeb/localTmp/testImageMove.html");
}
}
Run Code Online (Sandbox Code Playgroud)
点按前的屏幕截图:
我遇到了类似的问题。WebView出现问题的原因是您必须在方向更改期间保存状态。如果不这样做,网页将被视为第一次加载。这意味着使用 JavaScript 动态应用的任何更改都将完全丢失。
首选/正确的方法:
根据网络的复杂性,这可能需要一些工作,因为没有内置的方法可以做到这一点。您必须手动处理需要在 JavaScript 本身中保存哪些动态更改。要采取的步骤的高级视图:
onSaveInstanceState()调用 JavaScript 函数,例如 saveState()localStorage.onRestoreInstanceState()调用 JavaScript 函数 IE RestoreState()不明智但简单的方法:覆盖清单中的
活动。configChanges这将阻止重新创建活动,因此不应重新加载网页。
进一步阅读:
有关从保存的状态重新创建 Activity 的信息,
优点/缺点到覆盖 configChanges
| 归档时间: |
|
| 查看次数: |
4001 次 |
| 最近记录: |