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方法。

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

更多相关文章

  1. Android源码获取方法
  2. Handler
  3. AsyncTask异步执行
  4. android自动屏幕旋转流程分析
  5. Android(安卓)AsyncTask介绍
  6. Android(安卓)SDK 2.2 离线安装
  7. Android使用Parcelable传递对象方法及注意事项
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android之初体验
  2. 关于成立北京Android爱好者俱乐部的声明
  3. 15款android设备上的代码编辑器
  4. 一个问题解决。开心。哈哈。。。
  5. Android数据库操作总结
  6. [置顶] Android热补丁技术—dexposed原理
  7. Java / Android(安卓)监控进程Crash异常
  8. [置顶] 安卓视频播放器 一行代码快速实现
  9. 打造Android的中文Siri语音助手(一)——
  10. Android静态代码扫描-自定义规则