Android WebView样式background-color:透明在android 2.2上被忽略

jpt*_*ung 150 transparency android background transparent webview

我正在努力创建一个透明背景的WebView.

webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);
Run Code Online (Sandbox Code Playgroud)

然后我加载一个html页面

<body style="background-color:transparent;" ...
Run Code Online (Sandbox Code Playgroud)

WebView的背景颜色是透明的,但是一旦页面加载,它就会被html页面中的黑色背景覆盖.这只发生在Android 2.2上,它适用于android 2.1.

那么在html页面代码中添加一些内容以使其真正透明吗?

sco*_*yab 280

这对我有用,

mWebView.setBackgroundColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

  • 我发现这必须被称为*AFTER*加载网址或数据. (86认同)
  • 如果你使用`android:hardwareAccelerated ="true"`它在android 3.x中不起作用 (11认同)
  • 实际上我不明白为什么这个答案会得到这么多的选票.webView.setBackgroundColor(00000000); 与webView.setBackgroundColor(0x00FFFFFF)完全相同; alpha值为0x00. (9认同)
  • 请注意,在ICS(4.0.3)上,除上述评论外; 我必须禁用"设置 - >开发人员选项 - >强制GPU渲染"以使透明度与API级别10一起使用. (2认同)

Cee*_*etn 124

前面提到的问题的底部有一个解决方案.它是两种解决方案的组合.

webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)

加载url 将此代码添加到WebViewer时,它可以正常工作(API 11+).

当硬件加速打开时,它甚至可以工作

  • webView.setBackgroundColor(Color.argb(1,0,0,0)); 如果你想滚动时没有背景闪烁 (7认同)
  • 只要Webview不可滚动,它就可以工作. (2认同)
  • 它在加载内容之前也有效.测试4.0.4 (2认同)
  • 这将禁用Webview的硬件加速!!这对我来说不是显而易见的(怪我在使用:D之前没有查找它),答案的最后一句给人的印象与此相反。这实际上会影响很多内容,视频,UI转换,滚动,画布等。可能的解决方法http://stackoverflow.com/a/17815574/2487876 (2认同)

osa*_*gan 36

我在2.2和2.3中遇到了同样的问题.我通过在html中给出alpa值而不是在android中解决了这个问题.我尝试了很多东西,我发现的setBackgroundColor();颜色与alpha值无关.webView.setBackgroundColor(Color.argb(128, 0, 0, 0));不管用.

所以这是我的解决方案,为我工作.

      String webData = StringHelper.addSlashes("<!DOCTYPE html><head> <meta http-equiv=\"Content-Type\" " +
      "content=\"text/html; charset=utf-8\"> </head><body><div style=\"background-color: rgba(10,10,10,0.5); " +
      "padding: 20px; height: 260px; border-radius: 8px;\"> $$$ Content Goes Here ! $$$ </div> </body></html>");
Run Code Online (Sandbox Code Playgroud)

在Java中,

    webView = (WebView) findViewById(R.id.webview);
    webView.setBackgroundColor(0);
    webView.loadData(webData, "text/html", "UTF-8");
Run Code Online (Sandbox Code Playgroud)

这是下面的输出截图.在此输入图像描述


jpt*_*ung 31

实际上这是一个错误,到目前为止没有人找到解决方法.已经创建了一个问题.这个小虫仍然在蜂巢中.

如果您认为这很重要,请为其加注星标:http://code.google.com/p/android/issues/detail?id = 14749


Ali*_*Ali 22

这是你如何做到的:

首先让你的项目基于11,但在AndroidManifest中将minSdkVersion设置为8

android:hardwareAccelerated ="false"是不必要的,它与8不兼容

wv.setBackgroundColor(0x00000000);
if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

this.wv.setWebViewClient(new WebViewClient()
{
    @Override
    public void onPageFinished(WebView view, String url)
    {
        wv.setBackgroundColor(0x00000000);
        if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }
});
Run Code Online (Sandbox Code Playgroud)

为了安全起见,请按照您的风格:

BODY, HTML {background: transparent}
Run Code Online (Sandbox Code Playgroud)

在2.2和4为我工作


lil*_*top 12

最重要的是没有提到.

html 必须具有设置为的body标记.background-colortransparent

所以完整的解决方案是:


HTML

    <body style="display: flex; background-color:transparent">some content</body>
Run Code Online (Sandbox Code Playgroud)

活动

    WebView wv = (WebView) findViewById(R.id.webView);
    wv.setBackgroundColor(0);
    wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    wv.loadUrl("file:///android_asset/myview.html");
Run Code Online (Sandbox Code Playgroud)


dug*_*ggu 9

下面的代码工作正常Android 3.0+但是当你在Android 3.0下面尝试这个代码然后你的应用程序强行关闭.

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)

你在不太熟悉的API 11上尝试下面的代码.

webview.setBackgroundColor(Color.parseColor("#919191"));
Run Code Online (Sandbox Code Playgroud)

要么

你也可以尝试下面适用于所有API的代码.

    webview.setBackgroundColor(Color.parseColor("#919191"));
    if (Build.VERSION.SDK_INT >= 11) {
        webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }
Run Code Online (Sandbox Code Playgroud)

以上代码使用全部为我.


小智 7

尝试 webView.setBackgroundColor(0);


Uma*_*air 7

以下代码为我工作,虽然我有多个webview并在它们之间滚动有点迟缓.

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p); 
Run Code Online (Sandbox Code Playgroud)

  • 这适用于Honeycomb,但遗憾的是不适用于ICS.该死的.但是如果你使用它,使用"android:layerType"属性在布局文件中更容易指定它,因为这对于只会忽略标记的旧版本也很有效. (3认同)
  • 甚至在ICS上工作的是在AndroidManifest中使用`android:hardwareAccelerated ="false"`为`activity`元素停用整个活动的硬件加速. (2认同)

Zah*_*bib 6

用这个

WebView myWebView = (WebView) findViewById(R.id.my_web);

myWebView.setBackgroundColor(0);
Run Code Online (Sandbox Code Playgroud)


Gau*_*ora 6

  • 尝试上面给出的所有内容后 我发现你
    webView.setBackgroundColor(Color.TRANSPARENT)loadUrl()/ 之前或之后指定都没关系loadData().
  • 重要的是你应该android:hardwareAccelerated="false"在清单中明确声明.

IceCream三明治上测试


Atu*_*waj 5

只需使用这些线......

webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);
Run Code Online (Sandbox Code Playgroud)

并记住一点,在 webview 中加载数据后始终设置背景颜色。