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

问题描述 投票:152回答:22

我正在努力创建具有透明背景的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);然后我用

android background webview transparency transparent
22个回答
283
投票

这对我有用,


6
投票

使用此

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

myWebView.setBackgroundColor(0);

6
投票
  • 经过上面给出的所有尝试。我发现你指定都没关系webView.setBackgroundColor(Color.TRANSPARENT)/ loadUrl()之前或之后的loadData()
  • 重要的是,您应该在清单中显式声明android:hardwareAccelerated="false"

3
投票

只需使用这些行.....

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

请记住,在将数据加载到Webview中后始终设置背景色。


3
投票

如果webview是可滚动的:

  1. 将此添加到清单中:

    android:hardwareAccelerated="false"
    

3
投票
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);
    }
}

2
投票

在加载html后设置bg(从快速测试中看来,加载html会重置bg颜色。此为2.3)。


0
投票

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


0
投票

我试图在我的GL视图上放置一个透明的HTML叠加层,但是它始终闪烁黑色,覆盖了我的GL视图。经过几天的尝试,摆脱了这种闪烁,我发现了这种解决方法对我来说是可以接受的(但对于Android来说却很可惜)。

问题是我需要硬件加速才能播放漂亮的CSS动画,因此webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);对我来说不是一个选择。


0
投票

这对我有用。尝试在加载数据后设置背景色。对于您的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>

0
投票

尝试:


124
投票

this earlier mentioned issue的底部有一个解决方案。它是两种解决方案的组合。


0
投票

如果没有任何帮助,则很可能您已将webView的大小固定了,将宽度和高度更改为wrap_content或match_parent,它应该可以工作。当我尝试加载Gif时,这对我有用。


0
投票
myWebView.setAlpha(0);

是最佳答案。有效!


0
投票

您可以像这样使用BindingAdapter:


36
投票

我在2.2和2.3中都有相同的问题。我通过在html中而不是在android中提供alpa值解决了问题。我尝试了很多事情,但发现setBackgroundColor();颜色不适用于alpha值。 webView.setBackgroundColor(Color.argb(128, 0, 0, 0));不起作用。


31
投票

实际上,这是一个错误,到目前为止,没有人找到解决方法。已创建问题。该错误仍在蜂窝中。


22
投票

这是您的操作方式:


12
投票

没有提到最重要的事情。


9
投票

以下代码在Android 3.0+]上工作正常,但是当您在android 3.0以下尝试此代码时,您的应用将被强制关闭。


7
投票

尝试webView.setBackgroundColor(0);


7
投票

下面的代码对我有用,尽管我有多个Web视图,并且它们之间的滚动有点慢。

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p); 
© www.soinside.com 2019 - 2024. All rights reserved.