android - 实例化后是否可以更改 WebView 的上下文?

标签 android webview

我有一个 WebView我正在加载一个 Activity ,以便预加载它,以便它立即在不同的 Activity 中弹出。 (从第一个开始)。

问题是为了实例化一个WebView , 我必须传入 Context ,在这种情况下,它是上面提到的第一个。

所以效果很好,第二个Activity显示 WebView正好。问题是如果我点击 <select> WebView 中的下拉菜单,它的选择器对话框显示在 WebView 下。感觉选择根本不起作用,直到您点击后退按钮并在返回父 Activity 之前短暂地看到选择对话框。

好像当我附加 WebView 时对于第二个 Activity 的布局,它的模式附加到该 Activity 的窗口,但是 WebView本身附加到父 Activity 的窗口,因此它显示在层次结构的较高位置。

我怎样才能改变 ContextWebView在实例化之后?

这是一个很难解决的问题——我必须在 Activity 开始之前创建 WebView,但我还需要选择对话框才能工作。

如果有人能给我一些见解,我将不胜感激。

这是针对 SDK 项目的,因此我无法访问父 Activity 。此外,saveState 不起作用,因为 WebView 中显示的大部分内容由 JavaScript 生成,并且不会传输完整的 DOM 堆栈。

最佳答案

您可以尝试使用 MutableContextWrapper 创建 WebView :

MutableContextWrapper mMutableContext=new MutableContextWrapper(context);
WebView mWebView=new WebView(mMutableContext);

稍后你可以做

mMutableContext.setBaseContext(newcontext);

但是……

  • WebView 是一个非常复杂的组件,它可能会使用传递的上下文来创建处理程序等其他对象。 WebView 可能使用这些处理程序将内容发布到原始 UI 线程,所以最后你可能会得到一个包含上下文混合的 View ,你知道,双重内存泄漏(如果它能正常工作的话)

  • Webview 跨越至少 1 个线程“webcore”,这是操作发生的地方,并且还与具有...处理程序的原始 UI 线程保持持续通信?通过原始上下文?谁知道!

  • 甚至有 2 种不同的 webview 引擎:Kitkat 基于 chromium,而 jelly bean 和以前的版本使用 AOSP/WebView。所以你有一个额外的断点。

  • 恕我直言,您陈述的理由不够充分。 WebView 并没有那么慢。如果您加载的应用程序是,请尝试对其进行优化。您可以为此做很多事情,例如从内部 Assets 加载 HTML 和图形。

关于android - 实例化后是否可以更改 WebView 的上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326781/

相关文章:

android - 聚焦文本输入时如何处理后退按钮

java - 序列化给出了错误的对象大小

android - 无论如何要从 View 对象中删除 onTouchListener 吗?

android - WebView 中的不可见缩放控件

html - 在 webview 中快速加载 html 文件,更改图像大小、字体和文本大小

android - 从 PreferenceScreen 到 DialogPreference

android - 在 espresso/androidTest 中使用混淆器

android - 使用 ShapedDrawable 将 ColorFilter 应用于 ImageView

android - 不要导航到 WebView 中的其他页面,禁用链接和引用

javascript - 评估 WebView、Android 上的 javascript 值