1

单击应用程序 WebView 上的链接时,我试图覆盖 url 加载。

页面加载,但 WebView 将保留它的最后滚动位置和内容大小。

是否有一些我忘记在 WebView 上设置的参数来重置内容大小和下次加载时的滚动位置?

这是我使用它的方式:

@SuppressLint("SetJavaScriptEnabled")
@AfterViews
protected void afterViews() {
  webView.getSettings().setJavaScriptEnabled(true);
  webView.setWebViewClient(new WebClient());
  webView.setWebChromeClient(new ChromeClient());
  webView.loadUrl(url);
}
public class WebClient extends WebViewClient {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    boolean isValidEmail = url.startsWith("mailto:") && Patterns.EMAIL_ADDRESS.matcher(url.substring("mailto:".length())).matches();
    boolean isValidPhone = url.startsWith("tel:") && Patterns.PHONE.matcher(url.substring("tel:".length())).matches();
    if (url.startsWith("about:")) {
      return super.shouldOverrideUrlLoading(view, url);
    }
    if (isValidEmail) {
      Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
      startActivity(Intent.createChooser(sendIntent, ""));
    } else {
      if (isValidPhone) {
        Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
        startActivity(Intent.createChooser(dialIntent, ""));
      } else {
        WebViewActivity.this.setPageTitle(url);
        webView.loadUrl(url);
      }
    }
    return true;
  }
  @Override
  public void onPageFinished(WebView view, String url) {
    //..
  }
}

public class ChromeClient extends WebChromeClient {
  @Override
  public void onProgressChanged(WebView view, int progress) {
    //...
  }
}

谢谢。

4

2 回答 2

1

您是否尝试在 onPageFinished 中设置滚动位置?

@Override
public void onPageFinished(WebView view, String url) {
    // other code...
    view.scrollTo(0,0);
}

这应该将 WebView 内容设置回顶部,而不是旧滚动位置

编辑1:

有时如果页面加载很长时间,这将无法正常工作,因此我们必须等待页面完全加载:

@Override
public void onPageFinished(WebView view, String url) {
    view.postDelayed(new Runnable() {
            @Override
            public void run() {
                webView.scrollTo(0, 0);
            }
        // Delay the scrollTo to make it work
        }, 300);
}

请注意,这次的 webView 不是 onPageFinished 方法中的 WebView,而是从布局中获取的 WebView(与 afterViews() 方法中的相同)。

于 2015-08-21T16:06:02.010 回答
0

@Bojan Kopanja,对于误导我深表歉意。事实证明,我将 webview 放入了一个带有滚动视图的拉动刷新侦听器中,并删除了该问题。尽管如此,还是感谢您的帮助。

于 2015-08-23T15:10:50.747 回答