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
设置为transparent
的body
标签。
所以完整的解决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是可滚动的:
-
将此添加到清单:
android:hardwareAccelerated="false"
要么
-
将以下内容添加到布局中的WebView中:
android:background="@android:color/transparent" android:layerType="software"
-
将以下内容添加到父级滚动视图中:
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); } });