【问题标题】:Android WebView requestFocus: How to prevent scrolling to top?Android WebView requestFocus:如何防止滚动到顶部?
【发布时间】:2016-04-28 14:54:18
【问题描述】:
有什么方法可以防止 Android WebView 在收到requestFocus 时将其内容滚动到顶部?
我需要在一个 Activity 中操作多个层,改变它们之间的焦点。但是,使用requestFocus 将焦点移回 WebView 总是会导致 WebView 跳转到它正在显示的 HTML 页面的顶部。虽然我可以在之后重新定位它,但这样做会扰乱正在处理的其他事件的顺序,从而大大增加了该代码的复杂性。更简单的解决方案是阻止 WebView 将其内容内容重新定位在 应该 只是一个简单的焦点更改上。有没有办法做到这一点? (我尝试过覆盖onOverScrolled 和onScrollChanged,但这些似乎没有被requestFocus 上的WebView 所做的滚动调用。)
【问题讨论】:
标签:
android
scroll
focus
android-webview
autoscroll
【解决方案1】:
经过多次尝试
WebSettings webSettings = mWebView.getSettings();
webSettings.setNeedInitialFocus(false);
setNeedInitialFocus(false) 可以解决问题。
【解决方案2】:
在WebView 中覆盖scrollTo:
public class MyWebView extends WebView{
public boolean requestingFocus = false; // requestFocus() is executing at the moment
@Override
public void scrollTo(int x, int y){
if(requestingFocus) // ignore such call
requestingFocus = false;
else
super.scrollTo(x, y);
}
}
并且在调用requestFocus()时,添加这一行:
myWebView.requestingFocus = true;
myWebView.requestFocus();
因此,将 WebView 滚动到顶部的 scrollTo 调用将被忽略。