webview.findnext()从屏幕中的当前触摸位置开始突出显示

时间:2018-05-16 07:11:40

标签: android-studio search webview highlight

我是android studio的新手。我正在做一个简单的项目。它使用webview加载html页面。我还在下面的页面中使用操作栏进行搜索,刷新......:

enter image description here

通过按搜索按钮,findAllAsync()方法用于查找并突出显示页面中的所有匹配项(匹配项以黄色显示)。操作栏中的下一个按钮使用findnext(true)方法,并允许用户在突出显示的匹配项之间移动。使用此方法,下一个以红色突出显示:

  next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            st = et.getText().toString();
            if(!st.equals("")&& st!=null) {

               ourBrow.findNext(true);

            }//not null

        }//on click

    });// next Button click

如果我只滚动或放大webview,一切正常,并且从页面中的前一个继续查找下一个。但是,如果我触摸webview中的某个位置,然后单击下一个按钮,则不会从页面中的上一个位置继续红色突出显示。例如,如果突出显示的前一个红色位于页面的第一个,我触摸页面的末尾,当我单击下一个按钮时,中间的黄色匹配将被转义,页面末尾的最后一个将突出显示在页面的末尾。从这个位置继续红色和红色突出显示。

由于我需要用户可以从之前的位置继续搜索并且触摸屏幕不会影响此顺序,我搜索了很多。我尝试禁用webview的触摸事件,但基于Android disable WebView touch but keep zooming/scrolling保持缩放和滚动功能。但我的问题仍然没有解决。请帮我解决这个问题。

感谢。

编辑:

为了解决这个问题,我试图清除视图的焦点(How to remove focus without setting focus to another control?)。但它不起作用:

View current = getCurrentFocus();
                    if (current != null) current.clearFocus();
                    ourBrow.findNext(true);

1 个答案:

答案 0 :(得分:0)

我建议以下不是最好的方法(并且它取决于您的网页)但它会起作用,使用以下网址将您的网页内容呈现为html:

webview.loadData(URLEncoder.encode(result).replaceAll("\\+", " "), "text/html", Encoding.UTF_8.toString());

与您的文字一起做任何你想要的方式突出显示你想要的方式,然后将它渲染回网页,如下所示:

myTextView.setText(Html.fromHtml("Your HTML Page"));

金块之后的API:

myTextView.setText(Html.fromHtml("Your HTML Page", Html.FROM_HTML_MODE_COMPACT));

希望有所帮助