1

我试图在单击应用程序WebView上的链接时重载网址加载。有关覆盖网址加载的Android WebView问题

页面加载但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) { 
    //... 
    } 
} 

感谢。

回答

0

@Bojan Kopanja,我真诚的道歉误导。 事实证明,我有一个拉内的webview刷新侦听器滚动视图,并删除它摆脱了问题。 感谢您的帮助。

1

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

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

这应该设置视图内容返回顶部,而不是旧的滚动位置

编辑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的这个时候是不是从法的WebView onPageFinished,但的WebView从LAYO取ut(与afterViews()方法中的一样)。

+0

我做了,没有效果。其他想法? –

+0

我已经更新了我的答案...尝试向onPageFinished添加一些延迟,因为如果页面需要一些时间加载,则可能无法正常工作 –