Android WebView 样式背景-颜色: 在 Android 2.2中忽略透明

我正在努力创建一个具有透明背景的 WebView。

webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);

然后我加载一个 html 页面

<body style="background-color:transparent;" ...

WebView 的背景颜色是透明的,但是一旦加载页面,它就会被来自 html 页面的黑色背景覆盖。这只发生在 android 2.2上,它可以在 android 2.1上工作。

那么,是否需要在 html 页面代码中添加一些东西来使其真正透明呢?

134759 次浏览

webView.setBackgroundColor(0);

事实上,这是一个错误,到目前为止还没有人发现一个变通方法。出现了一个问题。虫子还在蜂巢里。

如果你认为重要,请用星号表示: http://code.google.com/p/android/issues/detail?id=14749

这招对我很管用,

mWebView.setBackgroundColor(Color.TRANSPARENT);

下面的代码对我很有用,虽然我有多个 webview,在它们之间滚动有点慢。

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p);

在加载 html 之后设置 bg (从快速测试中看,加载 html 似乎会重置 bg 颜色。.这是2.3)。

如果要从已经获得的数据中加载 html,只需要执行。在 postDelayed 中,仅仅设置 bg (例如,透明)就足够了。.

我在2.2版和2.3版也有同样的问题。我通过在 html 中而不是在 android 中给出 alpa 值来解决这个问题。我尝试了很多事情,我发现是 setBackgroundColor();颜色不工作的阿尔法值。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>");

在爪哇,

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

下面是输出截图。enter image description here

这个前面提到的问题的底部有一个解决方案。 这是两种解决方案的结合。

webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

在加载 URL 的 WebViewer之后中添加此代码时,它可以工作(API 11 +)。

它甚至可以在硬件加速开启的情况下工作

用这个

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


myWebView.setBackgroundColor(0);

试试看

webView.setBackgroundColor(Color.parseColor("#EDEDED"));
  • 在尝试了以上给出的所有方法后,我发现无论你指定哪种方法都无所谓
    webView.setBackgroundColor(Color.TRANSPARENT)loadUrl()/loadData()之前或之后。
  • 重要的是应该在清单中显式声明 android:hardwareAccelerated="false"

冰淇淋三明治测试

你要这么做:

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

硬件加速 = “ 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);
}
});

为了安全起见,把这个放在你的风格里:

BODY, HTML {background: transparent}

在2.2和4的时候对我很有效

下面的代码可以很好地工作 Android 3.0 + ,但是当你在 android 3.0下面尝试这段代码时,你的应用程序会强制关闭。

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

少于 API 11上尝试下面的代码。

webview.setBackgroundColor(Color.parseColor("#919191"));

或者

你也可以尝试下面的代码,这对所有的 空气污染指数工程罚款。

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

以上代码为我使用充分。

用这些线..。

webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);

记住一点

我试图把一个透明的 HTML 覆盖在我的 GL 视图,但它总是黑色的闪烁覆盖我的 GL 视图。几天后,我试图摆脱这种闪烁,我发现这种变通方法是可以接受的(但对机器人的耻辱)。

问题是,我需要为我的漂亮的 CSS 动画硬件加速,所以 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);不是我的选择。

诀窍是在我的 GL 视图和 HTML 覆盖之间放置第二个(空的) WebView。这个 dummyWebView我告诉渲染在 SW 模式,现在我的 HTML 覆盖渲染顺利在 HW 和没有更多的黑色闪烁。

我不知道除了我的宏基 Iconia A700之外,这个在其他设备上是否有效,但是我希望我可以帮助别人。

public class MyActivity extends Activity {


@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);


RelativeLayout layout = new RelativeLayout(getApplication());
setContentView(layout);


MyGlView glView = new MyGlView(this);


RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);


dummyWebView = new WebView(this);
dummyWebView.setLayoutParams(params);
dummyWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
dummyWebView.loadData("", "text/plain", "utf8");
dummyWebView.setBackgroundColor(0x00000000);


webView = new WebView(this);
webView.setLayoutParams(params);
webView.loadUrl("http://10.0.21.254:5984/ui/index.html");
webView.setBackgroundColor(0x00000000);




layout.addView(glView);
layout.addView(dummyWebView);
layout.addView(webView);
}
}

如果 webview 是可滚动的:

  1. 将以下内容添加到清单中:

    android:hardwareAccelerated="false"
    

OR

  1. Add the following to WebView in the layout:

    android:background="@android:color/transparent"
    android:layerType="software"
    
  2. Add the following to the parents scroll view:

    android:layerType="software"
    
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

这肯定会有用的。 用编辑背景在 XML 中设置背景。 现在将显示背景

最重要的事情没有被提及。

Html 必须的有一个 body标记,background-color设置为 transparent

所以完整的解决方案是:


超文本标示语言

    <body style="display: flex; background-color:transparent">some content</body>

活动

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

这招对我很管用。试着在加载数据后设置背景颜色。对于您的 webview 对象上的 setWebViewClient,如下所示:

    webView.setWebViewClient(new WebViewClient(){


@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
webView.setBackgroundColor(Color.BLACK);
}
});

试试看:

myWebView.setAlpha(0.2f);

如果没有任何帮助,那么很可能您已经固定了大小 webView,将宽度和高度更改为 wrash _ content 或 match_parent,它应该可以工作。我试图加载动态图像的时候就成功了。

myWebView.setAlpha(0);

就是最好的答案,它起作用了!

你可以这样使用 BindingAdapter:

爪哇咖啡

@BindingAdapter("setBackground")
public static void setBackground(WebView view,@ColorRes int resId) {
view.setBackgroundColor(view.getContext().getResources().getColor(resId));
view.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}

XML:

<layout >


<data>


<import type="com.tdk.sekini.R" />




</data>


<WebView
...
app:setBackground="@{R.color.grey_10_transparent}"/>


</layout>

资源

<color name="grey_10_transparent">#11e6e6e6</color>

这不管用,

android:background="@android:color/transparent"

设置 webview背景颜色

webView.setBackgroundColor(0)

另外,我将窗口背景设置为透明的