PS:首先,在这里我们暂时不考虑只是为了打开一个网页而使用WebView的这种Demo式的初级使用
说到应用场景,我们还是想象一个能使用WebView的情况,用具体的业务逻辑来引出WebView
我们假设一种情况,以知乎的api举例,当我获取了知乎日报中其中一种日报的数据,例如音乐日报的输入,返回值是一个Json,使用Gson将其解析之后用一个封装好的实体类将数据封装好,然后显示在列表中
在这里都没有任何问题,拿着数据做个列表,很简单
但是再之后,需要实现每一项的点击事件,点击后要显示该项的具体内容(例如说这组数据的第一项是XXXX新闻,我点开,需要查看XXXX新闻的具体内容),这时候有几种解决办法呢
其实这个问题的分歧点应该在于如何显示(废话,你不获取这个子网页的数据,你拿啥显示,这一步是必须做的),目前我自己实现过的有两种
所以首先继续获取第二个网页的数据(是Json就使用Gson继续解析封装,有时候没有api就只能用Jsoup之类的爬虫将内容爬下来然后自己提取需要的地方了),然后将数据封装好
现在分歧来了
其一,自己用android写一个页面,比如说上面摆好banner轮播图用以显示网页中的图片,下面用textView来显示具体的文字内容
优点:样式你自己已经定义好了,无需去考虑样式的问题,只需要考虑拿着数据之后如何加载的问题
缺点:与网页端最后显示的样式有较大出入,例如人家是一段文字一张图,我们如果需要做到这点的话,可能需要动态的去添加控件,而这样又很不符合规范,可能会造成其他意想不到的问题,例如说加载图片,你可能需要用到Glide,但是如果你不事先定义好这个图片的大小,Glide又会使得图片变形,位置错乱,如果统一定义尺寸的话,例如只是一个表情图片,你可能把他们扩大到了一个大图的大小,但是你一个一个定义好又太为耗时,需要不停的判断,逻辑上就很容易出现问题,即使不出现其他的问题,光是用户体验就够受的了
其二,用WebView来实现,用字符串拼接的方式来将实体数据拼接成html,并且可使用css来美化样式,做到与网页相仿的效果,并且可以使用js来使WebView的内容与android交互
优点:与网页可以做到类似样式
缺点:加载确实稍慢一筹,因为需要拼接还需要加载样式,这里面有一定时间的消耗
这两种我个人认为没有绝对的高下之分,看具体需求而定,不过凭心而论我认为后者的制作成本要高,不过最后完成后相似度也要高一筹
如果网页自适应做的相当好,那么哪怕是直接用WebView的loadUrl也不失为一种特别好的方法