Android : 如何在WebView顯示的頁面中查找內容


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

 

另外,如果從本文章中獲益,請支持一下寡人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM