今天帮同事看了一个在android的webview中查找keyword然后高亮显示的问题,查看API发现webview已经提供了findAll的函数,ok,那就写一下试试,代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
editText = new EditText(this);
button = new Button(this);
button.setText("Search");
webView = new WebView(this);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(editText);
layout.addView(button);
layout.addView(webView);
setContentView(layout);
String content = "<html><body><div>Hello Web view, this is my first web view</div></body></html>";
webView.getSettings().setJavaScriptEnabled(true);
webView.loadData(content, "text/html", "utf-8");
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String keyWord = editText.getText().toString();
webView.findAll(keyWord);
}
});
但是运行之后发现不好使,google了一下,发现可能是一个bug,网上说还需要如下设置(服了google了)
try
{
Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
m.invoke(webView, true);
}
catch (Throwable ignored){}
这次终于好使了,高兴中。。。,然而同事说如果不用button,在页面load出来后,直接高亮keyword怎么样,我以为没问题但结果杯具了
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
String keyWord = "view";
view.findAll(keyWord);
}
});
这样竟然不好使。。。(泪流满面啊)
竟然数次的测试和调试,终于发现这样是好使的:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String keyWord = "view";
view.findAll(keyWord);
}
});
唉,无语啊。看来可能是和底层的解析渲染执行有关,等有时间看看代码到底是怎么回事。