我的目标是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)
。
答案 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中仍然有效-在其他版本中可能需要,也可能不需要)