Android WebView requestFocus:如何防止滚动到顶部?

6

有没有办法防止Android WebView在收到requestFocus时将其内容滚动到顶部?

我需要在Activity中操作多个层,改变它们之间的焦点。然而,使用requestFocus将焦点移回WebView总是会导致WebView跳转到显示的HTML页面的顶部。虽然我之后可以重新定位,但这会扰乱正在处理的其他事件的顺序,因此将显著增加代码的复杂性。更简单的解决方案是仅仅防止WebView在一个简单的焦点变化上重新定位其内容。有没有方法可以做到这一点?(我尝试过覆盖onOverScrolledonScrollChanged,但这些似乎不会被WebView在requestFocus上执行的滚动调用。)


我也遇到了这个问题。有进展了吗?谢谢。 - likaci
2个回答

4

尝试多次后

WebSettings webSettings = mWebView.getSettings();
webSettings.setNeedInitialFocus(false);

setNeedInitialFocus(false) 可能会解决这个问题。


0

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();

所以,调用 scrollTo 方法将 WebView 滚动到顶部的操作将被忽略。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接