WebView的各种坑,今天又让我发现一个。
一、懵逼
最近公司项目中新闻模块需要用WebView来加载,而且服务端返回的是String
类型的html代码,包含各种标签,各种转义符,一开始直接用loadDataWithBaseURL()加载的时候,出现各种<
、>
,直接懵逼了,后面一查,只是因为转义符的关系,那直接用String类的replace()方法替换成对应的<
、>
,就搞定了。
但是当新闻里面的图片大于屏幕宽度时,会出现横向滚动条,图片也只显示部分,向右滚动屏幕才能看到剩余的图片内容,这样极不方便,也不美观。
网上搜索了一番,有种解决方案是直接把整个WebView的绽放比例变小,适配屏幕,这样出来的图片是适配屏幕了,但是文字就变得非常小,完全就是把PC端网页塞进手机的感觉了。
二、转机
突然看到泡在网上的日子大哥的一篇文章WebView加载图片超过屏幕大小的问题,说的是让PC端在img标签里面配置一下最大宽度就可以解决了:
<style>
img{
max-width:80%;
height:auto;
}
</style>
三、再次懵逼
赶紧联系服务端人员,结果被告知,这是使用某个框架做出来的效果,没办法修改里面的样式,这不又再次懵逼了吗…
四、柳暗花明又一村
程序员都是打不死的蟑螂,只要有一线希望,就要努力去实现自己的价值,不,保住自己的饭碗。
上面泡网大哥的方法,其实就是给img设置样式。那服务端搞不定,就只能我们客户端这边来做了,能不能我们直接给每个img标签都加上最大宽度的限制呢?既然我们能把转义符替换掉,那是不是也能用同样的方法来加样式呢?
五、解决方案
答案是肯定的,在我们获取到的String类型的html代码里面,我们已经把转义符replace成我们实际需要的字符,这时候我们就能取到img的标签了(<img>
),那只要加上如下的代码,就可以了:
htmlData = htmlData.replace("<img", "<img style='max-width:90%;height:auto;'");
原理就是上面分析的,在每个img标签里面,加上最大宽度和高度的控制,最大宽度比例可以根据需要自由设置。经过测试,暂时没发现问题,如果大家有发现问题,或者有其它的解决方案,欢迎随时给我留言。
PS:欢迎关注SherlockShi博客