【问题标题】: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 将其内容内容重新定位在 应该 只是一个简单的焦点更改上。有没有办法做到这一点? (我尝试过覆盖onOverScrolledonScrollChanged,但这些似乎没有被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 调用将被忽略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2012-09-29
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多