博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android : 如何在WebView显示的页面中查找内容
阅读量:6089 次
发布时间:2019-06-20

本文共 1771 字,大约阅读时间需要 5 分钟。

Android : 如何在WebView显示的页面中查找内容

Author : Aoyousatuo Zhao

http://blog.sina.com.cn/aoyousatuo

WebViewAndroid提供的常用组件之一。它主要被设计用来显示html文件。正因为如此,所以在应用的开发过程中我们可以通过将需要显示的内容整理成html格式的 String从而轻松实现各种排版的效果。

虽然WebView组件封装了许多功能为应用的开发提供了便利,但是由于其开放的方法有限,有时候这种便利往往会给开发者造成很大的约束,例如开发者不能方便的控制WebView的显示起始行,不能得到相关的行信息等。所以说WebView方便大众的时候也难免会存在许多不足之处。

寡人在开发应用的过程中就遇到了一个难题:将html中指定的内容显示到当前屏幕中。怎么解决这个问题呢?寡人一遍遍地研究WebView开放的方法,始终没有得到很好的方案。白道不行,咱就来黑道,正史不行,咱就搜集野史,所谓条条大路通罗马嘛!于是寡人就到处搜寻WebView的源代码,希望通过非常规的办法(调用WebView类库中未开放的方法)有所起色。但是非常困难。并且显而易见,即使找到了,也是不安全的调用。这就像上海的楼倒倒,说不定什么时候就坍为平地。此路不但坎坷,前途未卜,而且有可能是断头路。

苍天啊!寡人虽然贵为天子但是有时候也很无奈,怎么办?寡人再次无奈地又审视了一下WebView开放的那几个可怜的方法。最后想了想,它们中最有希望救驾的只有findAllfindNext了。于是寡人想,如果能保证需要定位的内容的唯一性,通过搜寻需要定位的内容,不就把该内容显示到当前屏幕了吗?于是寡人大喜,打算着手一试,成功后举国欢庆。

但是,寡人一看帮助文档,这两个方法的说明为空,于是心中隐隐约约有一丝不安。果不其然,程序中一试,没有任何效果。寡人只好去咨询中西两位辅政大臣百度和谷歌了。终于……有了答案。下面就下诏天下,各位爱卿听仔细了:

先看辅政大臣给朕的说法:

 

Find is not a fully supported feature in webview.
However, try calling view.setFindIsUp(true) to get the match to draw; This function is hidden and subject to change, so your app may break in a future release.

 

WebView对搜寻查找功能不能充分地支持。然而,我们可以尝试着调用setFindIsUp方法来得到查询的结果,并且把它显示在当前屏幕(画出来)。这个方法被隐藏并且容易发生变化,所以你的应用或许在未来的版本中不能正常地使用它。

 

由此可见,要想findAll findNext起作用,必须调用setFindIsUp方法,但是此方法是内部函数,因此安全性不能保证,或许在未来某个版本就被和谐了。

尽管如此,这也是目前唯一较稳妥的一种解决方案。以后版本如果不能正常使用,说不定WebView会有更好的支持方法呢!

 

Example :

假设WebView已经装载了html内容,下面是搜寻部分的程序:

 

WebView webView = (WebView)findViewById(R.id.webView) ;

webView.findAll(“a”) ;

try{

  Method m = WebView.class.getMethod(“setFindIsUp”, Boolean.TYPE) ;

  m.invoke(webView, true) ;

}catch(Throwable ignored)

{

}

 

findNext的使用同理,这里不再累述。

 

总结

l      WebView findAll & findNext方法必须配合类内部方法setFindIsUp使用.

l      findAll效果是用空心框反白所有匹配的内容,用实心框反白第一个搜寻到的匹配内容,并且将其显示到当前屏幕。

l      如果需要取消搜寻的状态,可以调用clearMatches方法。

 

另外,如果从本文章中获益,请支持一下寡人。

转载地址:http://scvwa.baihongyu.com/

你可能感兴趣的文章
in和exists的区别以及exists和distinct去重的区别?
查看>>
一次关于汽车的想象
查看>>
MYSQL的mysqldump+binlog备份
查看>>
运维工具
查看>>
laravel数据库查询是use方法的使用
查看>>
Saltstack-12:prod生产环境部署keepalived
查看>>
python数据结构与算法(5)
查看>>
Java 多线程编程
查看>>
软链接和硬链接的区别
查看>>
理解eosio.token合约
查看>>
详解MongoDB复制集
查看>>
关于tomcat的8005端口启动不起来的解决办法
查看>>
常量指针-指向常量的指针,指针常量-指针本身是常量,常量-不能更改值的常量,数组指针-是指针int (*p)[n] 指针数组-是数组int *p[n]...
查看>>
谈谈Java引用和Threadlocal的那些事
查看>>
spark的持久化和共享变量
查看>>
migration vmware vms to openstack kvm 修改vmware windows scsi to ide
查看>>
Centos7下更改docker镜像存放地址
查看>>
大数据处理的基本流程
查看>>
CDH5.16.1集群企业真正离线部署
查看>>
ORACLE批量导入图片到BLOB字段
查看>>