android-studio - webview.findnext() 从屏幕当前触摸位置开始高亮
问题描述
我是android工作室的新手。我正在做一个简单的项目。它使用加载html页面的webview。我还在下面的页面中使用操作栏进行搜索、刷新……:
通过按下搜索按钮,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
如果我只滚动或放大 web 视图,一切都很好,并且从页面中的前一个继续查找下一个。但是,如果我触摸 web 视图中的某个位置,然后单击下一步按钮,红色突出显示不会从页面中的上一个位置继续。例如,如果前一个红色突出显示在页面的第一处并且我触摸页面的末尾并且当我单击下一个按钮时,中间的黄色匹配被转义并且页面末尾的最后一个突出显示在红色和红色突出显示从该位置继续。
由于我需要用户可以从上一个位置继续搜索并且触摸屏幕不会影响这个顺序,所以我搜索了很多。我试图禁用 webview 的触摸事件,但保持基于Android 的缩放和滚动功能禁用 WebView 触摸但保持缩放/滚动。但是我的问题仍然没有解决。请帮我解决这个问题。
谢谢。
编辑:
为了解决这个问题,我尝试清除视图的焦点(如何在不将焦点设置到另一个控件的情况下移除焦点?)。但它不起作用:
View current = getCurrentFocus();
if (current != null) current.clearFocus();
ourBrow.findNext(true);
解决方案
我会推荐以下不是最好的方法(它取决于您的网页),但它会起作用,将您的网页内容呈现为 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));
希望能帮助到你
推荐阅读
- flutter - 如何将粘性标题添加到列表视图?
- java-native-interface - 如何使用Angr分析共享库中的JNI函数?
- pandas - 使用 to_datetime 几个列名
- rdf - 如何从源数据生成语言标签
- matplotlib - 如何根据图形大小控制 matplotlib 注释(更具体地说是箭头)?
- javascript - 我的复选框未预先填充 redux 状态中存在的值,即 true 或 false
- csv - 将 Dataprep 配方导出为 CSV 时重复标头
- firebase - 在 Flutter 中捕获云 Firestore 文档快照错误
- ssl - GKE - 使用 Google 托管证书 (mcrt) 进行 SSL 连接到可扩展服务代理 (ESP)
- php - oath2 访问令牌 API 响应“expires_on”日期无效