蜂巢式WebView上出现黑屏闪烁问题

12

我在Honeycomb设备WebView中使用<input type="password">字段时遇到了问题。每当视图滚动时,屏幕会闪烁黑色,并且甚至会一直保持全黑(除了会绘制聚焦的密码字段),直到滚动结束。我在我检查过的所有三个Honeycomb平板电脑上都看到了这个问题。

我可以在浏览器应用程序中加载相同的HTML,我没有看到这个问题。我尝试更改WebView的WebSettings / WebChromeClient / WebViewClient上的许多设置,但在那里没有运气。我在Froyo平板电脑上加载了下面的代码,没有出现这个问题,因此似乎是一个特定于Honeycomb的问题。

有人以前见过这种情况吗?目前我无法解决或解决此问题。

以下是可重现问题的简短代码示例。只需聚焦密码字段并上下滚动即可。有一个密码类型输入字段和一个文本类型输入字段,只是为了显示该问题不会发生在文本类型字段上。 <div>标记只是为了更轻松地滚动并查看问题,尽管没有<div>标记,该问题仍然会发生。

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class PasswordFieldTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webview = new WebView(this);
        String html = "<html><body><div style=\"with: 120%; height: 200%; border: 20px dashed black;\">" +
            "Password: <input type=\"password\" name=\"passfield\"/><br/>" +
            "Text: <input type=\"text\" name=\"textfield\"/>" +
            "</div></body></html>";
        webview.loadData(html, "text/html", "utf-8");

        setContentView(webview);
    }
}

我遇到了同样的问题。有找到答案的运气吗? - Charles
没有,还没有什么好运气。如果您为WebView启用硬件加速,则问题会消失,但是目前硬件加速的WebView性能不可接受,因此这并不是真正的解决方案。我只是将我的登录屏幕移动到本地对话框中。 - Luke Phillips
我在Android 4.1中遇到了同样的问题,请告诉我如何解决,以便它可以在每个Android版本上运行? - Ravi
4个回答

6

在尝试了这里提供的所有方法之后,以下方法最终在所有手机上都起作用:

android:hardwareAccelerated="true"

AND:

if (android.os.Build.VERSION.SDK_INT < 16) {
 webView.setBackgroundColor(0x00000000);
} else {
 webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
}

如果您找到了一款无法使用的手机,请告诉我。

适用于以下手机:

  • note2(4.1.2)
  • htc one x(4.0.4)
  • galaxy s3(4.3)
  • nexus4(4.3)

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Erik B
是的,我已经找到了解决方案。将 WebView 放在 ScrollView 中并禁用 WebView 滚动即可。这样就不会出现黑色闪烁,但会有另一个问题。如果 WebView 占据整个屏幕,在滚动大段文本时,某些时刻只能滚动而没有更多的文本。当我打开 Gmail 官方应用程序并看到相同的问题时,我只能说再见... :D - Sinan Dizdarević

3
这是honeycomb设备中已知的问题。
然而,以下方法对我有效 -
Compatibility.getCompatibility().setWebSettingsCache(webSettings);

请务必实现兼容层,因为在SDK_INT < 11中以下方法不起作用。
webViewInstance.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

建议的解决方案列表在这里。

如何使用这个兼容性类?? - Ravi

0

对我来说,在xml布局文件中使用android:layer="software"很好用。


0
这似乎是一个 android:cacheColorHint 问题。尝试在 WebView 的属性集中将其设置为透明。

没有这样的属性? - Display Name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接