Android的WebView风格的背景颜色:Android 2.2透明被忽略

我正在努力创build一个透明背景的WebView。

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

然后我加载一个HTML页面

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

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

那么是否有什么要添加在HTML页面代码,使其真正透明?

这对我有用,

 mWebView.setBackgroundColor(Color.TRANSPARENT); 

在前面提到的问题的底部有一个解决scheme。 这是两种解决scheme的组合。

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

加载该URL 将此代码添加到WebViewer中,它可以工作(API 11+)。

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

我在2.2和2.3中也有同样的问题。 我解决了这个问题,通过在Android中给予alpa值而不是android。 我尝试了很多东西,我发现是setBackgroundColor(); 颜色不适用于alpha值。 webView.setBackgroundColor(Color.argb(128, 0, 0, 0)); 不pipe用。

所以这里是我的解决scheme,为我工作。

  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>"); 

而在Java中,

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

下面是输出截图。 在这里输入图像说明

其实这是一个错误,到目前为止没有人find解决办法。 一个问题已经被创build。 这个bug还在蜂窝里。

如果您认为这很重要,请将其列出: http : //code.google.com/p/android/issues/detail?id=14749

这是你如何做到的:

首先使您的项目基于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); } }); 

为了安全,把它放在你的风格上:

 BODY, HTML {background: transparent} 

为我在2.2和4工作

下面的代码工作良好的Android 3.0以上,但是当你尝试下面的这个代码在Android 3.0然后你的应用程序强制closures。

 webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 

你可以在你的less于API 11的代码上尝试下面的代码。

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

要么

你也可以尝试下面的代码,适用于所有的API罚款。

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

上面的代码使用完整的我。

下面的代码为我工作,虽然我有多个网页浏览和滚动它们之间有点呆滞。

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

最重要的是没有提到。

html 必须有一个background-color设置为transparentbody标签。

所以完整的解决scheme是:

HTML

  <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 myWebView = (WebView) findViewById(R.id.my_web); myWebView.setBackgroundColor(0); 
  • 尝试上面给出的一切后。 我发现无论你指定什么都没有关系
    loadUrl() / loadData()之前或之后的loadUrl() loadData()
  • 重要的是你应该在清单中显式声明android:hardwareAccelerated="false"

testing冰淇淋三明治

尝试webView.setBackgroundColor(0);

只要使用这些线…..

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

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

如果webview是可滚动的:

  1. 将此添加到清单:

     android:hardwareAccelerated="false" 

要么

  1. 将以下内容添加到布局中的WebView中:

     android:background="@android:color/transparent" android:layerType="software" 
  2. 将以下内容添加到父级滚动视图中:

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

这肯定会工作..用Editbackground在XML中设置背景。 现在将显示背景

设置加载后的HTML HTML(从快速testing似乎加载HTML重置BG颜色..这是2.3)。

如果你从你已经得到的数据加载的HTML,只是做一个.postDelayed你只要设置BG(例如透明)就足够了..

尝试webView.setBackgroundColor(Color.parseColor(“#EDEDED”));

我试图把一个透明的HTML覆盖在我的总帐视图,但它总是黑色的闪烁,涵盖了我的GL视图。 经过几天试图摆脱这种闪烁,我发现这个解决方法,这是我可以接受的(但对于Android的耻辱)。

问题是,我需要硬件加速我的漂亮的CSSanimation,所以webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 对我来说不是一个select。

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

我不知道这是否可以在我的Acer 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对象上的setWebViewClient:

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