在加载html后设置bg(从快速测试中看来,加载html会重置bg颜色。此为2.3)。
我正在努力创建具有透明背景的WebView。
webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);
然后我用]加载一个html页面>
<body style="background-color:transparent;" ...
WebView的背景色是透明的,但是一旦加载页面,它就会被html页面中的黑色背景覆盖。这仅在android 2.2上发生,在android 2.1上有效。
所以在html页面代码中要添加一些内容以使其真正透明吗?
我正在努力创建具有透明背景的WebView。 webView.setBackgroundColor(0x00FFFFFF); webView.setBackgroundDrawable(myDrawable);然后我用
这对我有用,
使用此
WebView myWebView = (WebView) findViewById(R.id.my_web);
myWebView.setBackgroundColor(0);
webView.setBackgroundColor(Color.TRANSPARENT)
/ loadUrl()
之前或之后的loadData()
。android:hardwareAccelerated="false"
。只需使用这些行.....webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);
请记住,在将数据加载到Webview中后始终设置背景色。
如果webview是可滚动的:
将此添加到清单中:
android:hardwareAccelerated="false"
webView.setBackgroundColor(0x00000000); webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
这肯定会工作。使用Editbackground在XML中设置背景。现在将显示背景
在加载html后设置bg(从快速测试中看来,加载html会重置bg颜色。此为2.3)。
如果您要从已获取的数据中加载html,只需执行.postDelayed,在其中只需将bg设置为(例如,透明)就可以了。]
尝试使用webView.setBackgroundColor(Color.parseColor(“#EDEDED”));
我试图在我的GL视图上放置一个透明的HTML叠加层,但是它始终闪烁黑色,覆盖了我的GL视图。经过几天的尝试,摆脱了这种闪烁,我发现了这种解决方法对我来说是可以接受的(但对于Android来说却很可惜)。
问题是我需要硬件加速才能播放漂亮的CSS动画,因此webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
对我来说不是一个选择。
诀窍是在我的GL视图和HTML叠加层之间放置第二个(空)WebView
。我告诉我要在SW模式下渲染此dummyWebView
,现在我的HTML叠加层可以在HW中平滑渲染,不再出现黑色闪烁。
我不知道该功能是否可以在My 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);
}
}
在加载html后设置bg(从快速测试中看来,加载html会重置bg颜色。此为2.3)。
尝试使用webView.setBackgroundColor(Color.parseColor(“#EDEDED”));
我试图在我的GL视图上放置一个透明的HTML叠加层,但是它始终闪烁黑色,覆盖了我的GL视图。经过几天的尝试,摆脱了这种闪烁,我发现了这种解决方法对我来说是可以接受的(但对于Android来说却很可惜)。
问题是我需要硬件加速才能播放漂亮的CSS动画,因此webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
对我来说不是一个选择。
这对我有用。尝试在加载数据后设置背景色。对于您的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
的大小固定了,将宽度和高度更改为wrap_content或match_parent
,它应该可以工作。当我尝试加载Gif时,这对我有用。
myWebView.setAlpha(0);
是最佳答案。有效!
您可以像这样使用BindingAdapter:
Java
@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>
尝试:
this earlier mentioned issue的底部有一个解决方案。它是两种解决方案的组合。
如果没有任何帮助,则很可能您已将webView
的大小固定了,将宽度和高度更改为wrap_content或match_parent
,它应该可以工作。当我尝试加载Gif时,这对我有用。
myWebView.setAlpha(0);
是最佳答案。有效!
您可以像这样使用BindingAdapter:
我在2.2和2.3中都有相同的问题。我通过在html中而不是在android中提供alpa值解决了问题。我尝试了很多事情,但发现setBackgroundColor();
颜色不适用于alpha值。 webView.setBackgroundColor(Color.argb(128, 0, 0, 0));
不起作用。
实际上,这是一个错误,到目前为止,没有人找到解决方法。已创建问题。该错误仍在蜂窝中。
这是您的操作方式:
以下代码在Android 3.0+]上工作正常,但是当您在android 3.0以下尝试此代码时,您的应用将被强制关闭。
尝试webView.setBackgroundColor(0);
下面的代码对我有用,尽管我有多个Web视图,并且它们之间的滚动有点慢。
v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p);