WebViewClient-透明的背景,用于更高版本的OS

时间:2018-08-21 16:28:46

标签: android android-webview

我的目标是SDK版本27,目前正在Oreo(物理设备)和API19(仿真器)上进行测试,并希望将WebView的背景设置为透明。

对于早期版本的API / SDK,有很多答案,但是对于这些版本,似乎没有任何帮助。

具体来说,我正在加载一个仅将图像返回到WebView的URL。 WebView比图像稍宽(因为图像大小可能有所不同)。

我总是可以在图像周围看到黑色背景(我已经确认这不是图像的一部分)

在附加到WebView的onPageFinished的{​​{1}}方法中,我正在尝试以下所有操作:

WebViewClient

我还将图层类型设置为wv.setBackgroundColor(Color.TRANSPARENT) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null) wv.setBackgroundResource(android.R.color.transparent)

2 个答案:

答案 0 :(得分:0)

这将使webview活动透明。

<style name="AppTheme.Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

在清单中将其添加为webview活动的主题

<activity android:name=".WebViewActivity" android:theme="@style/Theme.Transparent">

答案 1 :(得分:0)

事实证明,上面的代码实际上是使WebView透明,而我看到的黑色环绕实际上是渲染页面的伪body的默认背景。页面仅包含图像。 (This answer为我提供了线索!)

因此,诀窍是动态创建带有透明body的HTML页面并将图像包括在该页面中,而不是直接将图像直接加载到WebView中。

因此,使用:

wv.setBackgroundColor(Color.TRANSPARENT)
wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null)

onPageFinished方法中并使用

String myHTML = "<html><body style=\"background: transparent; margin:0; padding:0;\"><img src=\"" +
                myImgURL + "\"></body></html>";
wv.loadData(myHTML, "text/html", "UTF-8");

达到了将图像直接显示在画布上的效果,就像在WebView中显示图像一样。

(请注意,我尝试过使用setLayerType行,也可以不使用var isFilterRet = localStorage.getItem('pod-filter'); setTimeout(function() { if (isFilterRet){ $(isFilterRet).trigger('click'); } },10); 行,但它在Oreo中仍然有效-在其他版本中可能需要,也可能不需要)